Ich möchte einige Gurkenschritte wiederverwenden, kann aber nicht den richtigen Weg finden.
Ich möchte einen Schritt schreiben wie:
Given /^I login with (.*) credentials$/ |type|
# do stuff with type being one of "invalid" or "valid"
end
Aber dann noch einen Schritt wie:
Given /^I login successfully$
# call "Given I login with valid credentials"
end
Beim Testen der Benutzerauthentifizierung kann ich die erstere verwenden, aber an den meisten anderen Stellen kann ich die letztere verwenden und muss den Code nicht wirklich neu programmieren.
Gibt es eine Möglichkeit, diesen anderen Schritt aufzurufen, oder füge ich die Logik einfach in eine Hilfsmethode ein und rufe diese Methode von jeder Aufgabe aus auf (im Grunde genommen ein Refactoring der Methodenextraktion, das mich nach dem Lesen meiner Frage glauben lässt, dass dies tatsächlich der beste Weg ist wie auch immer)?
do
Erforderliche aus, um dendo...end
Block in der Ruby-Schrittdefinition zu starten . Es ist in der Tat erforderlich.Antworten:
UPDATE : Die unten beschriebene Methode ist veraltet. Die empfohlene Methode zum Aufrufen eines Schritts aus einem anderen Schritt sieht nun folgendermaßen aus:
Alte, veraltete Methode (als Referenz):
Sie können Schritte aus anderen Schritten wie diesem aufrufen:
Wenn alle Szenarien innerhalb eines Features dies (oder andere Schritte) erfordern, können Sie jedem Feature auch einen Hintergrund hinzufügen, mit den folgenden allgemeinen Schritten:
quelle
steps %Q{Given I am logged in}
steps
Methode nicht. Siehe meine Antwort unten.Beachten Sie, dass sich die Methode zum Aufrufen von Schritten innerhalb von Schritten in den letzten Versionen von Gurke geändert hat. Wenn ein Fehler wie "WARNUNG: Die Verwendung von" Gegeben / Wann / Dann "in Schrittdefinitionen ist veraltet, verwenden Sie" Schritt "bis Rufen Sie stattdessen andere Schritte auf: /path/to/step_definitions/foo_steps.rb: 631: in `block in '". Weitere Informationen finden Sie im Gurken-Wiki .
Der Kern der Änderung ist, dass Sie jetzt die Methoden
step
odersteps
verwenden sollten.quelle
syntax error, unexpected tIDENTIFIER, expecting keyword_end
stackoverflow.com/questions/43319331/…Das Aufrufen von Schritten aus Schrittdefinitionen ist eine schlechte Praxis und hat einige Nachteile :
Aslak Hellesøy empfiehlt , beliebte Aktionen in World zu extrahieren, anstatt Schritte wiederzuverwenden . Es isoliert diese Aktionen an einem Ort und erleichtert das Auffinden dieses Codes. Sie können Code auch in übliche Ruby-Klassen oder -Module extrahieren.
Hier ist eine nützliche Diskussion zu diesem Thema in der Gurken-Mailingliste - Link
quelle
Schließen Sie Ihre Schritte am besten in% {} und nicht in Anführungszeichen ein. Dann müssen Sie sich doppelten Anführungszeichen nicht entziehen, die Sie häufig verwenden müssen:
quelle
Verwenden Sie Schlüsselwörter in der Feature-Datei erneut, um die Wiederverwendbarkeit des Codes zu gewährleisten.
Es wird NICHT empfohlen, Step-Defs innerhalb von Step-Defs aufzurufen.
Ich würde meine Feature-Datei so schreiben,
In meiner Schrittdefinition (Dies ist Java)
Auf diese Weise gibt es viel Wiederverwendbarkeit von Code. Das gleiche Given and Then behandelt sowohl gültige als auch ungültige Szenarien. Gleichzeitig macht Ihre Feature-Datei für die Leser Sinn.
quelle