2012-10-16 41 views
5

爲了實現自動化目的,我使用了cucumber-watir-webdriver。我有以下目錄結構:保持黃瓜常見步驟的最佳做法

|features 
-|feature1 
--|1.feature 
--|step_definitions 
---|1.rb 
-feature2 
--|2.feature 
--|step_definitions 
---|2.rb 

等等。我需要知道什麼是減少1.rb2.rb冗餘的最佳做法。 feature1feature2是完全不同的,所以我不能將兩者合併到一個目錄中。 也有一些地方特徵線相同,但步驟執行是不同的,所以如果它們在一起會產生模糊性。

我需要知道是否在1.rb2.rb中有一些共同的部分,我應該在哪裏應該保留常用的步驟定義。

+0

請顯示相關的代碼。 –

+0

你需要什麼?像「檢查數據庫條目」是在兩個功能,但他們檢查數據庫是不同的我不想混合它們,並使事情複雜化。但是像「給我登錄」這樣的步驟是相同的​​,所以我想把它們的步驟定義放在一起。 –

回答

1

黃瓜只在當前或下面的目錄搜索的步驟定義。 所以我們不能有共同的步驟定義的目錄或文件下面兩個特徵目錄, 我找到了一個解決方案,這是

|features 
-|feature1 
--|1.feature 
--|step_definitions 
---1.rb 
-feature2 
--|2.feature 
--|step_definitions 
---2.rb 
-|common_steps.rb <-- keep common steps in here 

現在加載這個步驟定義你的1加

require "#{File.dirname(__FILE__)}/../../common_steps.rb" 

。 RBS。 你也可以有更長的目錄結構,則可以繼續common_steps.rb文件中包含以下功能共同步驟,每一個這樣的目錄,你可以要求以前common_steps.rb文件with--

require "#{File.dirname(__FILE__)}/../common_steps.rb" 

此代碼。 這將保持您的目錄結構和step_definition文件清潔

2

將您的功能分隔成單獨的目錄是很好的做法,但最好將*_step.rb文件放在features目錄下的step_definitions目錄中。您可以將兩個功能共同的步驟放到common_steps.rb文件中(甚至更好的是類似login_steps.rbtest_data_creation_steps.rb而不是common_steps.rb)。

要翻譯成相同的樣式的目錄結構圖在你的問題,我建議如下:

|features 
-|feature1 
--|1.feature 
-feature2 
--|2.feature 
-|step_definitions 
--|1.rb 
--|2.rb 
--|common_steps.rb <-- put your common steps in here 
+0

謝謝你,但我只有一個疑問,那些步驟的定義將被加載,如果我運行 「cucumber /features/feature1/1.feature」 如果有2-3層深的樹,我想運行特定功能 「cucumber /features/feature1/feature1.1/1.1.feature」然後將黃瓜autoload /功能/ step_definition –

+0

是的,他們將被加載。 –

+0

這是不正確的,他們不會被加載。你必須告訴黃瓜在哪裏看:'黃瓜 - 功能特點/ feature1/1.feature'。默認情況下,在指定功能部件及其子部件的包含目錄中查找步驟定義和支持代碼。 – jbpros