2010-07-08 91 views
17

我正在写一个使用SaS的Web应用程序。每个客户都有自己的db和app目录,因此我有一个rake任务,它创建所有运行其网站所需的最低数据(种子数据):默认权限和角色,superadmin用户,已填充的“us_states”表,一些本地软件仓库和终端(这是一个物流应用程序)。黄瓜测试中的种子数据

我没有对任何黄瓜情景和我刚开始建立了一些。我是一个黄瓜初学者。

我首先将这个种子数据任务放在一个给定的行中,但是这对于所有场景来说都是一个给定的情况,对于查看这些场景的非程序员来说没有多大意义(对于人类来说,它是这样的一个给定,它不需要有意识地表达)所以我把它移到了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。在每个场景之前填充任务,因为需要8秒。我应该在全球范围内运行一次吗?怎么样?
  2. 我是否必须使用After.do清理数据库?我真的不想这样做,因为我将仅在Model.delete_all语句中复制After.do中的逻辑。我注意到,我第一次运行后,测试数据库仍然有所有数据。我可以使用rake db:test:purge清除并重新初始化它。这是一个很好的做法吗?

回答

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

“之前做”应该是软件写“之前做”,开始以大写字母 – 0x4a6f4672 2012-08-10 15:17:04

3

Geoff Lanotte找到了答案。我只是想添加一个链接到hooks上的Cucumber wiki页面来描述这些和其他的例子。

+0

我还以为我被聪明! :) 谢谢! – 2010-07-09 01:58:54

7

一个修正杰夫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