我刚刚使用红宝石黄瓜,我希望有一个像csv文件的数据存储库,我可以在其中添加我的所有数据,因此它很容易维护,而且我的功能文件中没有硬编码
任何人都可以指出我如何做到这一点的正确方向
我看到的大部分情况都是这样的
Scenario: go to google
When I visit at "google.com"
Then I click the link "image"
我想这样做
Scenario: go to any website
When I visit at "website_a"
Then I click the link "image"
在我的CSV文件中,它可以查找ID“website_a”并选择数据“google.com”
答案 0 :(得分:1)
不要使用CSV。传输数据时CSV可以正常,但在用于配置数据时却没有。
而是使用YAML。它易于阅读,非常适合配置文件。 Ruby comes with a YAML parser作为标准库的一部分。
以下是如何开始:
require 'yaml'
data = {
'string' => 'foo',
'array_of_ints' => [1,2,3],
'int' => 0,
'boolean' => true
}
puts data.to_yaml
# >> ---
# >> string: foo
# >> array_of_ints:
# >> - 1
# >> - 2
# >> - 3
# >> int: 0
# >> boolean: true
您可以看到它易于阅读,而且,由于它的文字,使用编辑器修改YAML文件很容易。重新加载数据同样容易。如果我修改上面的代码来写入文件,我可以重新加载数据并接收包含数据的Ruby对象:
require 'yaml'
data = {
'string' => 'foo',
'array_of_ints' => [1,2,3],
'int' => 0,
'boolean' => true
}
File.write('data.yaml', data.to_yaml)
loaded_data = YAML.load_file('data.yaml')
loaded_data # => {"string"=>"foo", "array_of_ints"=>[1, 2, 3], "int"=>0, "boolean"=>true}
loaded_data['string'] # => "foo"
loaded_data['array_of_ints'] # => [1, 2, 3]
loaded_data['int'] # => 0
loaded_data['boolean'] # => true
您甚至可以模仿CSV文件,但我不确定您为什么要这样做,因为您必须按顺序或通过索引访问记录,而不是通过哈希直接访问它们:
loaded_data = YAML.load(<<EOT)
---
- [Name, HR, Avg. ]
- [Mark McGwire, 65, 0.278]
- [Sammy Sosa, 63, 0.288]
EOT
loaded_data # => [["Name", "HR", "Avg."], ["Mark McGwire", 65, 0.278], ["Sammy Sosa", 63, 0.288]]
答案 1 :(得分:0)
实际上有很多种方法可以处理这样的事情。 我为网址执行此操作的方式是“步骤变换转换&#39;
”https://github.com/cucumber/cucumber/wiki/Step-Argument-Transforms
url_transform.rb(将此信息放入您的&#39;支持&#39;文件夹)
Transform /^(~internet~)$/ do |trans| "http://the-internet.herokuapp.com" end
然后在我的功能中我只使用:
Given I go to the "~internet~" page
然后在我的步骤中使用:
Given /^I go to the "(.*)" page$/ do |url|
@browser.goto url
puts browser.url
终端输出:
http://the-internet.herokuapp.com/
(你不需要&#34;〜&#34;字符我只是用它们来提醒我他们是&#39;转换&#39;)
这绝不是最好的解决方案,但如果您是初学者,至少对于网址来说这可能是一个有用的技巧。