如何在 ruby​​ 中使用来自 yaml 的登录凭据

Posted

技术标签:

【中文标题】如何在 ruby​​ 中使用来自 yaml 的登录凭据【英文标题】:How to use login credentials from yaml in ruby 【发布时间】:2018-11-04 19:23:21 【问题描述】:

我是 ruby​​ 新手,我无法继续使用登录凭据。来自 ruby​​ 项目的 yml 文件。我有一个基本的 yml 文件

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

我用 require yml 创建了一个 yml.rb ,并访问 yml 路径并加载文件。 但我不知道如何在我的 test.rb 中通过 users/username ... :( 。我在“it”中添加了一个变量来存储 yml 类,最后我尝试使用

expect data['valid_user']

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

但在终端中我收到错误“NoMethodError: undefined method `[]' for nil:NilClass”

更新 这是我的yml.rb

require 'rspec'
require 'yaml'

class YamlHelper
  @env = 
  def initialize
    file = "#Dir.pwdpath 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

有人可以看看吗? 在此先感谢

祝你有美好的一天

【问题讨论】:

看看什么?你能显示 yml.rb 文件吗? 您好 SteveTurczyn, 你如何定义data?发布您的完整 test.rb 文件。 嗨,欢迎来到 ***。您能否在终端中分享有关该错误的更多信息?它附近有行号或文件名吗? 【参考方案1】:

看起来代码几乎在那里。当我调试这类东西时,我通常会先尝试将其提炼为最基本的测试

类似:

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 仅用于浏览器测试。

【讨论】:

非常感谢@spikeheap。它适用于 test_data.dig('login','users', 'username') 很好,如果这有帮助,请在此答案上打勾:)

以上是关于如何在 ruby​​ 中使用来自 yaml 的登录凭据的主要内容,如果未能解决你的问题,请参考以下文章

如何表示将 ruby​​ 哈希转换为 yaml 的 aws 内部函数

带有嵌入变量的 Ruby 字符串

使用 Ruby on Rails 从数据库中的 yaml 序列化字段中获取大小数

js-yaml -> 解析 ruby​​ 类型

ruby 修改Setting config yaml内容

如何在Ruby中使用来自哈希的查询参数构造URI