Как использовать учетные данные для входа из yaml в ruby - PullRequest
0 голосов
/ 25 мая 2018

Я новичок в ruby ​​и не могу перейти от использования логина.из файла yml для проекта ruby. У меня есть базовый файл yml

login:
  urls:
    gmail: "https://accounts.google.com/signin"
  users:
        username: something
        password: something_new

Я создал файл yml.rb с требованием yml, и получил доступ к пути yml и загрузке файла.Но я не знаю, как пройти через users / username ... в моем test.rb :(. Я добавил переменную "it" для хранения класса yml, и в конце я пытаюсь использовать

expect data['valid_user']

expect data['login']['urls']['gmail']
expect data['login']['users']['username'] 

но в терминале я получаю ошибку "NoMethodError: неопределенный метод` [] 'для nil: NilClass "

Обновление Вот мой yml.rb

require 'rspec'
require 'yaml'

class YamlHelper
  @env = {}
  def initialize
    file = "#{Dir.pwd}path of yml file"
    @env = YAML.load_file(file)
  end

  def get_variables
    @env
  end
end

Вот мой test.rb файл

describe 'My behaviour' do
  before(:each) do
    @browser = Selenium::WebDriver.for :firefox 
  end
  it 'verifies yml login' do
    yaml_helper = YamlHelper.new
    data = yaml_helper.get_variables
    expect data['valid_user']
    expect test_data['login']['urls']['gmail']
    expect test_data['login']['users']['username']
    expect test_data['login']['users']['password']
  end
  after(:each) do @browser.quit   
 end

Может кто-нибудь взглянуть? Заранее спасибо

Хорошего дня

1 Ответ

0 голосов
/ 25 мая 2018

Похоже, код там почти .Когда я отлаживаю подобные вещи, я часто пытаюсь сначала провести их до самого базового теста

Что-то вроде:

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.Такая ошибка встречается довольно часто, когда вы погружаетесь во вложенные хэши.Это означает одно из двух:

  1. Вы правильно спустились в хеш, но данные отсутствуют в YAML.
  2. Данные присутствуют в YAML, новы не понимаете это правильно.

Одно изменение, которое вы можете сделать, чтобы сделать этот код немного более устойчивым, это заменить:

test_data['login']['users']['username']

на:

test_data.dig('login', 'users', 'username')

Последний использует dig , который углубляется в структуру данных и пытается вернуть значение, которое вы ищете, но если он получит nil обратно в любой момент, он простовернуть nil, а не выдавать исключение.

Наконец, для теста, который вы вставили сюда, вам не нужны блоки before(:each) или after(:each) - Selenium необходим только для тестирования браузера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...