我在两个不同的功能文件中有两个场景,但这两个场景都测试搜索功能,但在我的页面的不同部分。 我的情景看起来像这样:
Scenario Outline: Search items from QuickSearch
Given that the following items
| id | title |
| 1 | Item1 |
| 2 | Item2 |
When I search for <criteria> in this search
Then I should get <result>
And I should not get <excluded>
Examples:
|criteria|result | excluded |
| 1 | 1 | 2 |
| 2 | 2 | 1 |
和
Scenario Outline: Using a filter
Given that I have the following things:
|id |name |
|1 | thing1 |
|2 | thing2 |
When I use the <filter> filled with <criteria>
Then I should obtain these <results>
And I should not obtain these <exclusions>
Examples:
|filter |criteria |results |exclusions |
|name |thing |1,2 | |
|id |1 |1 |2 |
正如你在第二个场景中所说,我已经改变了get to get这个词,以便为这两个场景编写单独的步骤。 我需要两个不同步骤的唯一原因是因为2个不同场景中的id映射到不同的名称(我不能同时使用相同的名称,并且不想在第二个中使用id 3)
所以我正在考虑这两个场景的常见步骤(至少当涉及到后面的步骤时)我想要一个哈希映射id和名称一起进行验证,但我希望哈希是根据称为步骤的场景而有所不同。
那么,在黄瓜+水豚中是否有一种方法可以告诉我哪种情况称为步骤?
答案 0 :(得分:1)
我不知道从Cucumber步骤直接访问方案名称的方法。但是,您可以在before hook中访问该名称并将其存储在变量中,以便它可用于您的步骤。
在挂钩之前添加此内容到env.rb
:
Before do |scenario|
case scenario
when Cucumber::Ast::OutlineTable::ExampleRow
@scenario_name = scenario.scenario_outline.name
when Cucumber::Ast::Scenario
@scenario_name = scenario.name
else
raise('Unhandled scenario class')
end
end
修改:如果您使用的是更新版本的Cucumber,请尝试改为:
Before do |scenario|
case scenario.source.last
when Cucumber::Core::Ast::ExamplesTable::Row
@scenario_name = scenario.scenario_outline.name
when Cucumber::Core::Ast::Scenario
@scenario_name = scenario.name
else
raise('Unhandled scenario class')
end
end
然后,您的步骤可以使用@scenario_name
检查方案名称。例如:
Then /I should get (.*)/ do |result|
if @scenario_name == 'Search items from QuickSearch'
# Do scenario specific stuff
elsif @scenario_name == 'Using a filter'
# Do scenario specific stuff
end
# Do any scenario stuff
end