我是红宝石的新手,我无法继续使用登录信用卡。来自一个ruby项目的yml文件。我有一个基本的yml文件
login:
urls:
gmail: "https://accounts.google.com/signin"
users:
username: something
password: something_new
我已经创建了一个带有require yml的yml.rb,并访问了yml路径&加载文件。 但我不知道如何通过我的test.rb中的用户/用户名...:。我已经添加了"它"一个变量来存储yml类最后我尝试了
expect data['valid_user']
expect data['login']['urls']['gmail']
expect data['login']['users']['username']
但在终端我收到错误" NoMethodError:未定义的方法`[]'为零: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
有人可以看看吗? 提前谢谢
度过美好的一天
答案 0 :(得分:0)
看起来代码几乎。当我调试这种事情时,我会经常尝试将其提炼到最基本的测试
类似的东西:
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
哈希的其中一个哈希变量就像哈希一样正在处理。当你潜入嵌套的哈希时,这种bug是相当普遍的。它意味着两件事之一:
您可以进行的一项更改将使此代码更具弹性,取而代之的是:
test_data['login']['users']['username']
使用:
test_data.dig('login', 'users', 'username')
后者使用dig,它深入研究数据结构并尝试返回您之后的值,但如果它在任何时候返回nil
,它将只返回{{ 1}},而不是抛出异常。
最后,对于您在此处粘贴的测试,您不需要nil
或before(:each)
块 - 只有浏览器测试才需要Selenium。