Cucumber 有没有办法检查哪种场景称为特定步骤?
我在两个不同的功能文件中有两个场景,但这两个场景都测试了搜索功能,但都位于页面的不同部分。 我看到的场景如下所示:Cucumber 有没有办法检查哪种场景称为特定步骤?,cucumber,capybara,Cucumber,Capybara,我在两个不同的功能文件中有两个场景,但这两个场景都测试了搜索功能,但都位于页面的不同部分。 我看到的场景如下所示: Scenario Outline: Search items from QuickSearch Given that the following items | id | title | | 1 | Item1 | | 2 | Item2 | When I search for <criteria> in this
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 |
场景大纲:从QuickSearch搜索项目
鉴于以下各项
|id |标题|
|1 |项目1 |
|2 |项目2|
当我在此搜索中搜索时
那我应该去
我不应该
示例:
|标准|结果|排除|
| 1 | 1 | 2 |
| 2 | 2 | 1 |
以及:
场景大纲:使用过滤器
鉴于我有以下几点:
|id |名称|
|1 |事情1|
|2 |事情2|
当我使用充满
那么我应该得到这些
我不应该得到这些
示例:
|筛选|标准|结果|排除|
|名称|事物| 1,2 ||
|id | 1 | 1 | 2|
正如您在第二个场景中所看到的,为了为这两个场景编写单独的步骤,我更改了get to get这个词。
我需要两个不同步骤的唯一原因是,两个不同场景中的id映射到不同的名称(不,我不能同时使用相同的名称,也不想在第二个场景中从id 3开始)
因此,我正在考虑这两种场景的通用步骤(至少在涉及then步骤时是这样),我希望哈希映射id和名称一起进行验证,但我希望哈希根据称为步骤的场景而有所不同
那么,cucumber+capybara中有没有一种方法可以告诉我哪种场景称为步骤?我不知道有什么方法可以直接从cucumber步骤访问场景名称。但是,您可以访问before钩子中的名称并将其存储在变量中,以便步骤可以使用该名称 将此前钩子添加到您的
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\u 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
值得注意的是Tyvm,希望它已经以某种方式实现了,但我可以使用它!
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