Похоже, код там почти .Когда я отлаживаю подобные вещи, я часто пытаюсь сначала провести их до самого базового теста
Что-то вроде:
require 'yaml'
file = "#{Dir.pwd}/data.yml"
data = YAML.load_file(file)
data['valid_user']
#=> nil
data['login']['urls']['gmail']
#=> "https://accounts.google.com/signin"
data['login']['users']['username']
#=> "something"
Из приведенного выше видно, чтоопечатка в вашем файле test.rb
: test_data
, скорее всего, должно быть data
.Кроме того, ваш файл YAML не содержит ключа valid_user
, поэтому вы, вероятно, захотите удалить его из теста, по крайней мере, на данный момент.
Другие два ключа работают нормально.
Ошибка, которую вы видите NoMethodError: undefined method '[]' for nil:NilClass
, означает, что один из хэшей, которые вы используете, вы трактуете как хеш, на самом деле nil
.Такая ошибка встречается довольно часто, когда вы погружаетесь во вложенные хэши.Это означает одно из двух:
- Вы правильно спустились в хеш, но данные отсутствуют в YAML.
- Данные присутствуют в YAML, новы не понимаете это правильно.
Одно изменение, которое вы можете сделать, чтобы сделать этот код немного более устойчивым, это заменить:
test_data['login']['users']['username']
на:
test_data.dig('login', 'users', 'username')
Последний использует dig , который углубляется в структуру данных и пытается вернуть значение, которое вы ищете, но если он получит nil
обратно в любой момент, он простовернуть nil
, а не выдавать исключение.
Наконец, для теста, который вы вставили сюда, вам не нужны блоки before(:each)
или after(:each)
- Selenium необходим только для тестирования браузера.