2009-03-19 6 views
9

Sto usando cetriolo per generare script di test che possono essere eseguiti da uno strumento o da un essere umano ... quindi non l'uso standard.Come posso accedere allo scenario e ai nomi di esempio in Cucumber?

Tuttavia, vorrei passare attraverso lo scenario e i nomi di esempio fino al mio output.

È possibile?

+0

mi aspetto la soluzione per essere qualcosa di simile a Prima di fare | scenario | fine, ma non ha un metodo name e l'oggetto scenario sembra essere un Cetriolo :: Ast :: OutlineTable :: ExampleCells nel mio caso come sto usando Scenario Outlines –

risposta

8

trovato .. (con qualche aiuto da Tim Walker)

Before do |scenario| 
puts "Before Scenario: #{scenario.to_sexp[2]}" 
. 
. 
. 
end 

tuo sExpression può essere diverso, quindi vale la pena di fare un scenario.to_sexp.inspect per vedere ciò che quell'albero è.

Aslak desidera evitare di esporre le proprietà sulle sue classi (è una decisione con cui sono d'accordo, quindi sono contento di fare questo lavoro in giro).

+2

'scenario.name' sembra funzionare correttamente sulle versioni correnti di Cucumber. – jpatokal

2

Una risposta più seria (o almeno un suggerimento): usa il riflesso di Ruby per cercare di trovare ciò che stai cercando. Afferra oggetti probabili, scopri quali metodi hanno e vedi se riesci a trovarli. Ad esempio:

File.open('happy_hunting.log','a') { |f| 
    f.print "Scenario supports: #{(scenario.methods - Object.methods).inspect}\n" 
    } 

e quindi ripeterlo per capire dove.

Un altro suggerimento, guarda la fonte.

+0

Che non funziona perché non ci sono oggetti scenario disponibili nello scenario, a meno che non lo catturi con un blocco Prima, come mostrato nella risposta di Nigel. – jpatokal

0

Ho fatto qualcosa di scrappy. Poiché utilizzo queste informazioni solo per il debug, funzionerà per ora, finché non trovo qualcosa di meglio.

@Before 
public void printTestInfoBeforeScenario(Scenario scenario) { 
    LOGGER.info("Upcoming Test: "+scenario.getSourceTagNames()); 
} 

@After 
public void printTestInfoAfterScenario(Scenario scenario) { 
    LOGGER.info("Test Complete: " + scenario.getSourceTagNames() + " Status: " + scenario.getStatus()); 
} 
Problemi correlati