2011-08-03 178 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 

这些“建筑法”的描述都是你不需要再使用不同文件之间的步骤/域。