Вытащить схему сценария (или прочитать тег) из шага cucumber

Если у меня есть сценарий, который начинается так:

  @my-tag

  Scenario Outline:
  Admin user changes email

    Given I register a random email address

...

можно ли прочитать текст схемы сценария или @my-tag в определении отдельного шага? Например, в I register a random email address шаг я хотел бы напечатать отладочную информацию, если она работает по заданному сценарию или значению тега.

1 ответов


вы не можете получить доступ к этой информации непосредственно из определения шага. Если вам нужна информация, вам придется захватить ее во время перед крючком.

огурец 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

для огурца 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"]