5

我是黄瓜测试的新手。

我创建了两个功能文件:

events.feature
partner.feature

并将我的步骤定义放在 step_definitions 文件夹中:

./step_definitions/
     events.rb
     partner.rb

似乎 Cucumber 在所有 .rb 文件中查找步骤信息。

无论如何限制该功能以查看特定的步骤定义文件?

我为什么要这样做的原因是因为我得到了不明确的匹配错误,即使我使用了 --guess 标志。

我为什么要这样做是出于以下原因。我正在测试一个 CMS,并希望在不同的功能中测试每种不同的内容类型(事件和合作伙伴)。

事件.功能

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

合作伙伴特征

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 文件中我需要包含:

合作伙伴.rb

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

事件.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   | 

但我不想这样做,因为我想将每种内容类型封装在它们自己的测试功能中。

所以基本上我需要根据我正在测试的功能来研究如何运行特定的步骤文件。

4

3 回答 3

9

Cucumber 总是加载所有文件,我认为没有办法覆盖这种行为。关于您的步骤不明确的问题 - 解决方案很简单 - 为您的步骤添加参数

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

在场景中只是这样称呼它

然后我应该看到“合作伙伴内容”

  • 免费奖金 - 您的场景现在更具可读性
于 2011-08-03T14:04:58.440 回答
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,查看其中的一些步骤也可能很有用。

于 2011-08-03T14:07:09.900 回答
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

这些“构建代码”描述是您无需在不同文件/域之间重用步骤的全部内容。

于 2011-10-01T12:00:09.657 回答