黄瓜试验中的种子数据

时间:2010-07-08 21:22:30

标签: ruby-on-rails cucumber

我正在编写一个使用SaS的网络应用程序。每个客户都有自己的db和app目录,所以我有一个rake任务,它创建了运行他们网站的所有必要的最小数据(种子数据):默认权限和角色,superadmin用户,已经填充的“us_states”表,一些本地仓库和终端(这是一个物流应用程序)。

我没有任何黄瓜情景,我刚开始构建一些。我是黄瓜的初学者。

我首先将种子数据任务放在Given行中,但这几乎适用于所有场景,并且对于那些查看场景的非程序员来说没有多大意义(对于人类来说,它是这样一个给定它不需要有意识地表达)所以我把它移到了hooks.rb。

我的第一个场景如下:

  1 Feature: Place an order
  2   In order to keep orders in the database
  3   As a admin
  4   I want to place orders
  5
  6 Scenario: Using common legs
  7   Given I have 1 customers
  8   And I'm on the homepage
  9   And I follow "Place an Order"
 10   When I select the customer
 11   And I select the SSLine
 12   And I click "Use Common Legs"
 13   Then I should see "PICKUP AT"
 14   And I should see "DELIVER TO" or "LOAD AT"
 15   And I should see EMPTY RETURN

我的hooks.rb看起来像这样:

1 Before do
2   MinimumData.new('costi', '1234').populate  #username and password
3 end

问题:

  1. 我不希望在每个场景之前运行此MinimumData.populate任务,因为它需要8秒。我应该只在全球范围内运行一次吗?怎么样?
  2. 我是否必须使用After.do清理数据库?我真的不想这样做,因为我将使用Model.delete_all语句复制After.do中的逻辑。我注意到,在我第一次运行之后,测试数据库仍然存在所有数据。我可以使用rake db:test:purge清除它并重新初始化它。这是一个好习惯吗?

3 个答案:

答案 0 :(得分:22)

我不知道黄瓜的before(:all)当量。您可以做的是将种子添加到文件features/support/seeds.rb,然后在features/support/env.rb的顶部,并在要求environment.rb放置该行的行下方:

require File.dirname(__FILE__) + '/seeds'

或者

#just write the code you want to execute directly into the env.rb file

这些是您在env.rb

中添加的可用块
Before do
  #this code is run before each scenario
end

after do
  #this code is run after each scenario
end

at_exit do
  #this code is run at the end
end

答案 1 :(得分:7)

对Geoff Lanotte的回答进行了一次修正。它应该是

Before do
  # this code is run before each scenario
end

有大写字母B.

但是,您可能希望将其放在功能/支持目录中的新文件中,而不是将此类代码放入env.rb文件中,例如:一个“hooks.rb”文件。这是因为如果升级cucumber-rails,则会自动重新生成env.rb文件。

此处提供更多信息:https://github.com/cucumber/cucumber/wiki/Hooks

答案 2 :(得分:3)

Geoff Lanotte有答案。我只是在hooks上添加了一个指向Cucumber wiki页面的链接,其中描述了这些和其他示例。