Als ich ein Problem sah, entschied ich mich, was einzuchecken Die Befehle before
und after
werden ausgeführt. Das habe ich gemacht:
und was ich habe:
%Vor% Was geht hier vor ?? Warum wird after_each
vor A_it_1
ausgeführt?
UPDATE:
das Hinzufügen von around(:each)
macht noch mehr Spaß:
und Ergebnisse:
%Vor%Ihre Ausgabe und die auf reliShop.com dokumentierte offizielle Ausgabe sind korrekt. Was passiert ist, dass rspec die after (: each) es nach jedem Beispiel ausführen muss, weil eine Ausnahme in einem after (: each) das Beispiel zum Scheitern bringen würde. Bevor rspec das Beispiel in der Ausgabe anzeigen kann, muss es wissen, ob es grün oder rot ist, was bedeutet, dass die after (: eaches) ausgeführt werden muss, bevor die Beschreibung des Beispiels in der Ausgabe erscheint.
Wenn Sie jedoch eine puts-Anweisung in Ihr aktuelles Beispiel einfügen, sehen Sie, dass die Vorher-Zeichen (: each) davor vorkommen, dann wird der Beispiel-Code ausgeführt (einschließlich der Puts), dann das Nachher-Zeichen (: each). es, wie Sie es erwarten, und schließlich wird die Beschreibung des Beispiels auf dem Bildschirm ausgegeben.
Wie du war ich auch verwirrt, bis ich merkte, dass rspec, das das Label des Beispiels druckt, nicht mit dem übereinstimmt, was es tatsächlich tut - das Label wird nur einmal alle vorher ausgedruckt (: alle), bevor ( : jedes) es, und nachdem (: jedes) es für das Beispiel ausgeführt wird.
Hinweis: nachdem (: alle) s ausgeführt werden, nachdem das Beispiellabel ausgedruckt wurde, weil sie das Ergebnis des Tests nicht beeinflussen (es wird eine Warnung generiert, dass in einem after (: all) -Hook eine Ausnahme aufgetreten ist, aber Dadurch wird ein Test nicht rot).
Die RSpec-Dokumentation für before
und after
hooks gibt die Reihenfolge an, in der sie ausgeführt werden. Die Dokumentation von RSpec für around
hooks funktioniert jedoch nicht Geben Sie nicht die Reihenfolge an, in der sie ausgeführt werden.
Diese Spezifikation testet die Reihenfolge, in der around
, before
und after
:all
und :each
und Beispiele ausgeführt werden. Wenn ich es mit rspec (-core) 2.14.8 ausführe, werden sie in der Reihenfolge ausgeführt, die Sie erwarten:
Beachten Sie einige möglicherweise überraschende Dinge:
self
unterscheidet sich in den Blöcken :all
und :each
, daher musste ich eine globale statt einer Instanzvariablen verwenden. after :all
(aber nicht before :all
) isst Ausnahmen. .should
funktioniert! Nicht dass du es normalerweise dort benutzen willst.