如果我有一个像这样开始的场景:
@my-tag Scenario Outline: Admin user changes email Given I register a random email address
…
是否可以在单个步骤定义中读取场景大纲文本或@ my-tag?例如,在I中注册一个随机电子邮件地址步骤,如果它在给定方案或标签值下运行,我想打印调试信息.
解决方法
您无法直接从步骤定义中访问该信息.如果您需要这些信息,则必须在之前的钩子中捕获它.
黄瓜v3
钩子之前的以下内容将捕获功能名称,方案/大纲名称和标签列表.请注意,此解决方案适用于Cucumber v3.0.对于早期版本,请参阅答案的结尾.
Before do |scenario| # Feature name @feature_name = scenario.feature.name # Scenario name @scenario_name = scenario.name # Tags (as an array) @scenario_tags = scenario.source_tag_names end
@feature_tag Feature: Feature description @regular_scenario_tag Scenario: Scenario description Given scenario details @outline_tag Scenario Outline: Outline description Given scenario details Examples: |num_1 | num_2 | result | | 1 | 1 | 2 |
步骤定义为:
Given /scenario details/ do p @feature_name p @scenario_name p @scenario_tags end
会给出结果:
"Feature description" "Scenario description" ["@feature_tag","@regular_scenario_tag"] "Feature description" "Outline description,Examples (#1)" ["@feature_tag","@outline_tag"]
然后,您可以检查@scenario_name或@scenario_tags以获取条件逻辑.
黄瓜v2
对于Cucumber v2,所需的钩子更复杂:
Before do |scenario| # Feature name case scenario when Cucumber::Ast::Scenario @feature_name = scenario.feature.name when Cucumber::Ast::OutlineTable::ExampleRow @feature_name = scenario.scenario_outline.feature.name end # Scenario name case scenario when Cucumber::Ast::Scenario @scenario_name = scenario.name when Cucumber::Ast::OutlineTable::ExampleRow @scenario_name = scenario.scenario_outline.name end # Tags (as an array) @scenario_tags = scenario.source_tag_names end
输出略有不同:
"Feature description" "Scenario description" ["@regular_scenario_tag","@feature_tag"] "Feature description" "Outline description" ["@outline_tag","@feature_tag"]