2011-08-03 216 views
5

我是黃瓜測試新手。黃瓜特徵和步驟定義

我已經創建了兩個特徵文件:

events.feature 
partner.feature 

,並有在step_definitions文件夾我的步驟定義:

./step_definitions/ 
    events.rb 
    partner.rb 

看來,黃瓜看起來所有的.rb文件的步驟的信息。

是否有限制功能來查看特定的步驟定義文件?

爲什麼我想這樣做的原因是因爲我得到了含糊不清的匹配錯誤,即使當我使用--guess標誌時。

爲什麼我想這樣做的原因是由於以下原因。我正在測試CMS,並且想要在不同的功能中測試每種不同的內容類型(事件&合作伙伴)。

events.feature

Feature: Add partner 
    As an administrator I can add a new partner 

    Scenario: Create partner 
    Given I am logged in 
    When I create a partner 
    Then I should see content 

partner.feature

Feature: Add event 
    As an administrator I can add a new event 

    Scenario: Create event 
    Given I am logged in 
    When I create an event 
    Then I should see content 

只是着眼於 '話,我應該看到的內容',這是在這兩種情況下,因爲在.RB文件時出現錯誤我需要包括:

partners.rb

Then /^I should see content$/ do 
    BROWSER.html.should include('SOME PARTNER CONTENT') 
end 

events.rb

Then /^I should see content$/ do 
    BROWSER.html.should include('SOME EVENT CONTENT') 
end 

這意味着有是「我應該看到的內容」曖昧比賽。

我知道有這個結構不同的方式,即我可以創建一個內容特徵,並使用場景概述:

Feature: Add content 
    As an administrator I can add a new content 

    Scenario Outline: Create content 
    Given I am logged in 
    When I create an <content type> 
    Then I should see <example content> 

    Examples: 
    |event |March Event | 
    |partner |Joe Blogs | 

但我不想這樣做,因爲我想每個封裝內容鍵入他們自己的測試功能。

所以基本上我需要解決如何根據我測試的功能運行特定的步驟文件。

回答

9

黃瓜總是加載所有文件,我不認爲有重寫此行爲的方法。對於不明確的步驟,您的問題 - 解決方案很簡單 - 將參數添加到您的步驟

Then /^(?:|I)should see "([^"]*)"$/ do |text| 
    page.should have_content(text) 
end 

而且在場景只是這樣稱呼它

然後,我應該看到「合作伙伴的內容」

  • 免費獎金 - 您的場景現在更具可讀性
+0

我同意這種方式。你的腳步也應該更具表現力。 –

1

我沒有看到您建議的替代方法有任何問題。將步驟定義分離爲邏輯域是有道理的。然而,似乎你可能會試圖把它放得太遠,這會導致大量重複的代碼和像你現在看到的含糊不清的匹配問題。我建議你做這樣的事情:

Feature: Add partner 
    As an administrator I can add a new partner 

    Scenario: Create partner 
    Given I am logged in 
    When I create a partner 
    Then I should see "partner content" 

,同樣,在你的事件功能:

... 
Then I should see "event content" 

然後,你可以在一個單獨的文件step_definitions/common_steps.rb如下:

Then /I should see "(.*)"$/ do |content| 
    BROWSER.html.should include(content) 
end 

這一步沒有任何關於它的合作伙伴/事件。相反,這些方案包含特徵的數據特定字符串。

如果您正在使用Rails應用程序,那麼cucumber-rails gem實際上會爲您爲Web應用程序測試創建一堆通用步驟。即使你不使用Rails,看看其中一些steps也許會有用。

+0

是的 - 我看到你對重複代碼的看法 - 謝謝。 – JonB

0

我一直在尋找這個,但它似乎是不可能的「開箱」。

我的解決方法是區分經常使用某種附加描述步驟,如類名,例如:

Scenario: Buildings List 
    Given I have a Building with code "B1" 
    And I have a Building with code "B2" 
    When I go to the list of buildings 
    Then I should see "B1" building code 
    And I should see "B2" building code 

這些「建築法」的描述都是你不需要再使用不同文件之間的步驟/域。