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

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

@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"]

licensed under cc by-sa 3.0 with attribution.