2013-08-21 7 views
6

Se ho uno scenario che inizia così:scenario Pull contorno (o leggere un tag) all'interno passo cetriolo

@my-tag 

    Scenario Outline: 
    Admin user changes email 

    Given I register a random email address 

...

è possibile leggere sia il testo dello scenario contorno oppure lo @my-tag in una singola definizione di passo? Ad esempio, nel passaggio mi piacerebbe stampare le informazioni di debug se è in esecuzione in un determinato scenario o un valore di tag.

+0

piacevole domanda, grazie –

risposta

20

Non è possibile accedere a tali informazioni direttamente da una definizione di passaggio. Se hai bisogno delle informazioni, dovrai catturarle durante un hook prima.

cetriolo v3 +

quanto segue prima di gancio catturerà il nome della funzione, scenario Nome/contorno e l'elenco dei tag. Nota che questa soluzione è per Cucumber v3.0 +. Per le versioni precedenti, vedere la fine della risposta.

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 

A titolo di esempio, il file della caratteristica:

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

Con passo definito come:

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

darà i risultati:

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

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

Si potrebbe quindi verificare il @scenario_name o @scenario_tags per la tua logica condizionale.

cetriolo v2

Per cetriolo v2, il gancio richiesto è un più complesso:

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 

L'uscita è leggermente diverso:

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

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

solo aggiungi: scenario.feature.source_tag_names restituirà solo ["@feature_tag"] –

+0

hai salvato il mio tempo, grazie –

+0

'Cetriolo costante non inizializzato :: Ast'. Ast è stato deprecato, avendo difficoltà a rintracciare come sostituirlo. –

Problemi correlati