2010-07-08 84 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