如何将CSV文件作为ruby cucumber数据存储库

时间:2014-08-01 14:40:49

标签: ruby csv cucumber

我刚刚使用红宝石黄瓜,我希望有一个像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”

2 个答案:

答案 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;)

这绝不是最好的解决方案,但如果您是初学者,至少对于网址来说这可能是一个有用的技巧。