2009-03-19 2 views
9

Ich verwende Gurke, um Testskripte zu generieren, die von einem Werkzeug oder einem Menschen ausgeführt werden können ... also nicht die Standardanwendung.Wie kann ich auf die Szenario- und Beispielnamen in Cucumber zugreifen?

Allerdings möchte ich die Szenario- und Beispielnamen durch meine Ausgabe weitergeben.

Ist das möglich?

+0

ich die Lösung erwarten, etwas zu sein wie Bevor tun | Szenario | puts scenario.name end aber es hat keine Name Methode und Szenario-Objekt scheint eine Gurke zu sein :: Ast :: OutlineTable :: ExampleCells in meinem Fall, wie ich Szenario Outlines –

Antwort

8

es gefunden .. (mit etwas Hilfe von Tim Walker)

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

Ihre SExpression unterscheiden kann, so lohnt es sich einen scenario.to_sexp.inspect tun, um zu sehen, was der Baum ist.

Aslak ist bestrebt, Eigenschaften seiner Klassen zu vermeiden (was eine Entscheidung ist, der ich zustimme, also bin ich froh, diese Arbeit zu machen).

+2

'scenario.name' scheint auf aktuellen Versionen von Cucumber gut zu funktionieren. – jpatokal

2

Eine ernsthaftere Antwort (oder zumindest Vorschlag): Nutzen Sie die Reflexion von Ruby, um herauszufinden, wonach Sie suchen. Greifen Sie auf wahrscheinliche Objekte zu, finden Sie heraus, welche Methoden sie haben, und sehen Sie, ob Sie sie finden können. Zum Beispiel:

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

und dann wiederholen Sie es, um herauszufinden, wo.

Ein anderer Vorschlag, schauen Sie sich die Quelle an.

+0

verwenden Das funktioniert nicht weil innerhalb des Szenarios kein Szenarioobjekt verfügbar ist - es sei denn, Sie erfassen es mit einem Vor-Block, wie in Nigels Antwort gezeigt. – jpatokal

0

Ich habe etwas scrappy gemacht. Da ich diese Informationen nur zum Debuggen verwende, funktioniert das jetzt, bis ich etwas Besseres finde.

@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()); 
} 
Verwandte Themen