Vor ein paar Tagen habe ich mit Matt Wynne gesprochen (einem Mitglied des Kernteams von Gurkenjuwel) und er hat mir gesagt, dass es keine solche Funktion in der Gurke gibt (zum Zeitpunkt des Schreibens).
Als Workaround schlug er vor, das gesamte Feature zu markieren und vor jedem Hook mit einem Flag wie folgt zu versehen:
%Vor%LukasMacs Antwort funktionierte nicht mit @ variable. Ande basierend auf der offiziellen Gurken Wiki -Seite, mein Beispiel unten funktionierte und testete ok, der vorhergehende Haken wird nur einmal ausgeführt Eigenschaft:
%Vor%Die Haken für Gurke werden in dieser Wiki-Seite beschrieben, die die Vor- und Nachhaken zeigen, die Sie haben können.
Von dieser Seite stammt dieses Beispiel:
Das folgende Beispiel führt dazu, dass mit @fast gekennzeichnete Szenarien fehlschlagen, wenn die Ausführung länger als 0,5 Sekunden dauert:
%Vor%Da Rubingurke nicht mit der Option geliefert wird, Hooks vor und nach einem Feature zu erstellen, wurde eine Ad-hoc-Lösung vorgeschlagen.
Um einen Hook für ein Feature anzugeben, muss der Methodenname das folgende Format haben:
before_feature_ [Name des formatierten Features] after_feature_ [Name des formatierten Features]
Der Name des formatierten Features ist der Text aus der Zeile "Feature:" in der Feature-Datei, die wie folgt formatiert ist:
(i) alle Charaktere in Kleinbuchstaben; (ii) alle Räume mit Unterstrichen ersetzt; und, (iii) alle Sonderzeichen gelöscht
Innerhalb von Methoden kann die Übereinstimmung mit diesem Konvention-Code wie bei Szenario-Hooks angegeben werden.
Aufbauend auf den Lösungen von LukasMac und Gob00st habe ich die folgenden Workarounds für meinen aktuellen Client implementiert.
Die Methoden werden in einem Hooks-Unterverzeichnis namens AAA_special_hooks in einer special_hooks.rb-Datei in diesem Verzeichnis (der einzigen Datei) gespeichert, weil alle anderen Dinge gleich sind und die Hooks in der Reihenfolge ausgeführt werden, in der sie in der Projektstruktur erscheinen Auf diese Weise werden die hier erstellten Hooks vor allen Szenario-Hooks ausgeführt, die in anderen Unterverzeichnissen oder im Basisverzeichnis von hooks angegeben sind.
Der Code im folgenden Anhang ist Vanille, soweit ich sehen kann, würde es für jeden funktionieren.
Der pre-Hook läuft nach dem Prinzip, ein globales Flag zu setzen, um sicherzustellen, dass der Hook nur einmal für ein Feature ausgeführt wird (gemäß LukasMac und Gob00st). Dieses Prinzip wurde aus zwei Gründen auf den abstrakten Hook erweitert: Erstens, um die Spezifikation von Hooks im Allgemeinen zu vereinfachen und um Konsistenz mit der after-hook-Implementierung zu erreichen.
Der after-Hook bestimmt, ob sich das Feature seit der letzten Ausführung des Szenarios geändert hat. Wenn dies der Fall ist, wird der After-Hook für das vorherige Feature ausgeführt, bevor irgendetwas in dem aktuellen geschieht. Offensichtlich könnte die Sicherheitslücke sein, dass das neue Feature tatsächlich gestartet wurde, bevor der After-Hook für den vorherigen ausgeführt wird, aber ich kann nicht sehen, wie dies zu Problemen führen könnte. Das letzte Feature kann jedoch auf diese Weise keinen after-Hook-Lauf haben, und das ist der Grund für die Neuimplementierung dieses Codes in der at_exit-Methode.
Verspotten von BeforeFeature / AfterFeature-Hooks ist möglich, indem Sie das erste Szenario des Features mit einem Tag namens @ExecuteBeforeFeature und dem letzten Szenario mit dem Tag @ExecuteAfterFeature taggen und dann die markierten Before und After-Hooks wie folgt schreiben:
%Vor%