Dies ist eine Spezifikation für einen sehr typischen Controller mit Ich habe alle möglichen Ergebnisse des Zugriffs auf Wie Sie vielleicht bereits vermuten, erreicht die Spezifikation nicht einmal Ich habe nach einer Antwort auf die Frage gesucht: "Wie man mit" rspec and devise "auf nicht authentifizierte ( guest ) Benutzer richtig testet, aber alle reden nur davon, Probleme mit der tatsächlichen Anmeldung von Benutzern im Gerät zu haben für RSpec zu verwenden.
Ein Problem, das ich so gelöst habe: Es ist jedoch nicht die Anmeldung, die hier fehlschlägt, es ist das "nicht protokolliert".
Bis jetzt habe ich absolut nichts und ich kenne Leute HABEN diese Szenarien irgendwie zu testen. Im Moment benutze ich einen Walkaround: Aber auch wenn es praktisch korrekt ist ( Irgendwelche Ideen wie man es richtig macht? (... Vielleicht sollte ich das überhaupt nicht testen, da die Richtigkeit von before_filter
, der zur Anmeldeseite umleitet, wenn ein nicht eingeloggter Benutzer (aka Gast ) versucht, auf /projects/new
. :index
, :show
und :new
für Gäste , Benutzer , Admins und Superadmins . Ich hatte keine Probleme, weder angemeldete Benutzer noch Gastbenutzer, Admins oder nicht, zu benutzen - aber dies ist das erste Mal, dass diese Spezifikation eine Aktion berührt, die Devices before_filter :autheticate_user!
betrifft und es kläglich scheitert. expect(response).to be_redirect
, sondern wirft einen Wutanfall vor: uncaught throw :warden
passiert nur, wenn authenticate_user!
ausfällt, so dass es als Erwartung verwendet werden kann). In der Theorie fühlt es sich sehr dreckig an. before_filter authenticate_user!
die Verantwortung von Devise ist, nicht meine?)
Es sollte einfach funktionieren. Ich habe gerade eine Weile damit verbracht, das gleiche Problem zu beheben, und es stellte sich heraus, dass wir einen Test-Helper hatten, der process
für Controller-Tests überschreibt. Devise überschreibt es auch auf catch :warden
, also brauchte ich nur include Devise::TestHelpers
, bevor ich das Standardparametermodul einfügte.
Für ein Beispiel von dem, worüber ich spreche, wenn ich sage, dass wir process
überschrieben haben, siehe diese Antwort , die beschreibt, wie Standardparameter so eingestellt werden, dass format: json
Die Lektion ist also, dass uncaught throw :warden
passiert, wenn authenticate_user!
fehlschlägt.
Finden Sie heraus, warum Ihre Benutzerauthentifizierung fehlgeschlagen ist, und Sie haben Ihr Problem gelöst.
Tags und Links ruby-on-rails rspec devise warden