2013-08-21 8 views
6

Wenn ich ein Szenario, die wie folgt beginnt:Pull-Szenario Umriss (oder einen Tag lesen) aus Gurke Schritt

@my-tag 

    Scenario Outline: 
    Admin user changes email 

    Given I register a random email address 

...

ist es möglich, entweder den Szenario Umriss Text zu lesen oder die @my-tag in einer individuellen Schrittdefinition? Zum Beispiel möchte ich im Schritt I register a random email address Debug-Informationen drucken, wenn es unter einem bestimmten Szenario oder einem Tag-Wert ausgeführt wird.

+0

Nizza Frage, Dank –

Antwort

20

Sie können nicht direkt auf diese Informationen innerhalb einer Schrittdefinition zugreifen. Wenn Sie die Informationen benötigen, müssen Sie sie während eines Vorher-Hooks erfassen.

Gurke v3 +

Die folgende bevor Haken wird die Funktion Namen, Szenario/outline Namen und die Liste der Tags erfassen. Beachten Sie, dass diese Lösung für Cucumber v3.0 + gilt. Für frühere Versionen, sehen Sie das Ende der Antwort.

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 

Als Beispiel die Feature-Datei:

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

Mit Schritt wie folgt definiert:

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

den Ergebnissen geben:

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

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

Sie könnten dann überprüfen die @scenario_name oder @scenario_tags für Ihre bedingte Logik.

Gurke v2

Für Gurke v2 ist die erforderliche Haken ein komplizierter:

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 

Der Ausgang ist etwas anders:

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

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

nur zu add: scenario.feature.source_tag_names gibt nur ["@feature_tag"] zurück –

+0

Sie haben meine Zeit gespeichert, danke Sie –

+0

'nicht initialisierte konstante Gurke :: Ast'. Ast war veraltet, da es Probleme gab, herauszufinden, wie es ersetzt werden sollte. –

Verwandte Themen