2013-08-21 10 views
6

Jeśli Mam scenariusz, który zaczyna się tak:scenariusz Pull kontur (lub odczytać tag) od wewnątrz kroku ogórka

@my-tag 

    Scenario Outline: 
    Admin user changes email 

    Given I register a random email address 

...

jest to możliwe do odczytania albo tekst scenariusz konturu lub @my-tag w definicji pojedynczego kroku? Na przykład w kroku I register a random email address chciałbym wydrukować informacje debugowania, jeśli działa on pod określonym scenariuszem lub wartością znacznika.

+0

Nicea pytanie, dzięki –

Odpowiedz

20

Nie można uzyskać dostępu do tych informacji bezpośrednio z poziomu definicji kroku. Jeśli potrzebujesz informacji, będziesz musiał ją uchwycić podczas haka przed.

Ogórek v3 +

Poniższy przed hakiem przechwyci nazwę funkcji scenariusz/nazwę konturu oraz listę tagów. Zauważ, że to rozwiązanie jest dla Cucumber v3.0 +. W przypadku wcześniejszych wersji spójrz na koniec odpowiedzi.

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 

Jako przykład, plik cecha:

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

Z kroku zdefiniowany jako:

Given /scenario details/ do 
    p @feature_name 
    p @scenario_name 
    p @scenario_tags 
end 

dadzą wyniki:

"Feature description" 
"Scenario description" 
["@feature_tag", "@regular_scenario_tag"] 

"Feature description" 
"Outline description, Examples (#1)" 
["@feature_tag", "@outline_tag"] 

Następnie można sprawdzić @ scenario_name lub @scenario_tags dla twojej logiki warunkowej.

Ogórek v2

Dla Ogórek v2, wymagana hak jest bardziej skomplikowana:

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 

Wyjście jest nieco inna:

"Feature description" 
"Scenario description" 
["@regular_scenario_tag", "@feature_tag"] 

"Feature description" 
"Outline description" 
["@outline_tag", "@feature_tag"] 
+1

tylko add: scenario.feature.source_tag_names zwróci tylko ["@feature_tag"] –

+0

zaoszczędzisz mój czas, dziękuję ty –

+0

'niezainicjowana stała Ogórek :: Ast'. Ast został uznany za przestarzały, ponieważ miał problem ze znalezieniem sposobu jego zastąpienia. –

Powiązane problemy