Ich arbeite an einigen Gurkengeschichten für eine 'Anmeldung' Anwendung, die eine Anzahl von Schritten hat.Sitzungsvariablen mit Gurkengeschichten
Anstatt dann eine Huuuuuuuge Geschichte zu schreiben, um alle Schritte auf einmal zu erfassen, die wäre, würde ich lieber durch jede Aktion im Controller wie ein normaler Benutzer arbeiten. Mein Problem hier ist, dass ich die Konto-ID speichern, die im ersten Schritt als eine Sitzungsvariable erstellt wird, also wenn Schritt 2, Schritt 3 usw. besucht werden, werden die vorhandenen Registrierungsdaten geladen.
Ich bin mir bewusst, auf controller.session[..]
innerhalb RSpec Spezifikationen zugreifen zu können, aber wenn ich versuche, dies in Gurkengeschichten zu tun, schlägt es mit dem folgenden Fehler fehl (und ich habe auch gelesen, dass dies ein Anti-Muster usw. ist) ..):
Mit controller.session [: was auch immer] oder session [: was auch immer]
You have a nil object when you didn't expect it!
The error occurred while evaluating nil.session (NoMethodError)
Verwendung Sitzung (: was auch immer)
wrong number of arguments (1 for 0) (ArgumentError)
So scheint es, Beitritt der Session-Speicher ist nicht wirklich möglich. Was ich frage mich, wenn es möglich sein könnte (und ich denke, das Beste wäre, ..):
- aus Mock dem Session-Speicher usw.
- haben ein Verfahren innerhalb der Steuerung und Stummel, dass aus (zB
get_registration
die eine Instanz Variable zuweist ...)
ich durch das RSpec Buch geschaut haben (gut, entrahmte) und hatte einen Blick durch webrat etc, aber ich habe festgestellt, nicht wirklich eine Antwort auf mein Problem ...
Um ein bisschen mehr zu verdeutlichen, ist der Anmeldeprozess mehr wie eine Zustandsmaschine - z.B. der Benutzer durchläuft vier Schritte, bevor die Registrierung abgeschlossen ist - daher ist "Einloggen" nicht wirklich eine Option (es bricht das Modell, wie die Website funktioniert) ...
In meiner Spezifikation für den Controller konnte ich den Aufruf der Methode auszugeben, die das Modell basierend auf der Session-Var lädt - aber ich bin mir nicht sicher, ob die 'Antipattern'-Zeile auch für Stubs und Mocks gilt?
Danke!
Vielen Dank für die Eingabe ... Ich habe meine Frage mit einigen mehr Details aktualisiert, aber was Sie vorgeschlagen haben, nicht wirklich helfen, da sie Funktionalität beinhalten würde das Hinzufügen speziell für die Tests, die mir eher wie ein "Anti-Pattern" erscheinen - aber Controller-Methoden ausstoßen würden, brechen diese Regel? –
zusätzliche Funktionalität? Wie meldet sich ein Benutzer auf Ihrer Site an? Sie erwähnen Ihren Registrierungsprozess, aber nicht einloggen. Warum können Sie keine Factory für einen bereits registrierten Benutzer erstellen und sie wie oben beschrieben anmelden? Gurkengeschichten sollten genau ausdrücken, wie der Benutzer mit Ihrer Website interagiert. Ein Benutzer kann keine Controller-Methoden ausgeben. Sie haben Formulare zum Ausfüllen und Links zum Klicken. Es ist kein Abnahmetest, wenn es das Benutzerverhalten nicht nachahmt. – danpickett
Ich sehe beide Seiten hier.Ich habe fast genau das oben genannte für das Feature, das Tests Authentifizierung funktioniert so, wie ich will. Für andere Features scheint es ein Schmerz zu sein, diese Capybara-Schritte wiederholen zu müssen, um sich für jedes Szenario anzumelden. Gurke kann den Datenbankzustand für den Zweck eines Tests manipulieren, warum nicht die Sitzung? –