Warum sind meine RSpec-Tests fehlgeschlagen, aber meine App funktioniert?

9

Ich habe gerade Kapitel 10 des Ruby on Rails Tutorials fertig gestellt die Fähigkeit zum Bearbeiten / Aktualisieren, Indizieren und Zerstören von Benutzern. Alles scheint in meiner App richtig zu funktionieren, aber viele meiner Tests schlagen fehl, wenn ich RSpec starte.

Ich habe die user_controller_spec genau so eingerichtet, wie es das Buch tut und mein Anwendungscode ist derselbe. Könnte ein Problem sein, dass ich Rails 3.1.1 im Gegensatz zu Rails 3.0 verwende, das er im Buch verwendet? Es war nicht wirklich ein Problem für vorherige Tests, nur gelegentlich für ein paar verschiedene Codezeilen. Die Probleme begannen zu erscheinen, nachdem ich Abschnitt 10.2.1 gestartet habe.

Hier ist die Liste der Fehler, die ich sehe und bitte lassen Sie mich wissen, wenn Sie weitere Informationen benötigen. Danke!

%Vor%

UPDATE:

Ich habe zwei der Fehler behoben, aber die meisten bestehen immer noch. Ein Problem scheint zu sein, dass wenn der Test versucht, "get: index" zu bekommen, er nicht die richtige Seite findet wegen einer Umleitung (zur / signin-Seite). Ich habe keine Weiterleitungen eingeführt (mit Absicht sowieso), aber vielleicht hat jemand eine Vorstellung davon, wie dies geschehen könnte und wie es behoben werden könnte.

UPDATE # 2:

Per @ bkempners Anfrage, hier ist der entsprechende Code von users_controller_spec und users_controller (users_controller_spec zuerst). Viel Code, aber viele Fehler ...:

%Vor%

Und nun der gesamte users_controller:

%Vor%     
RBergs 30.10.2011, 23:50
quelle

6 Antworten

1

Ich hatte das gleiche Problem und fand die Antwort gepostet hier .

im Grunde RSPEC benötigt sowohl @current_user als auch den aktuellen Benutzer für sign_in und sign_out. Seltsam und nervig, aber vielleicht der Grund, warum man Devise in einer Produktions-App verwenden sollte!

    
Michael K Madison 24.11.2011, 08:06
quelle
0

Die Bereitstellung Ihres Controllers und Testcodes wäre hilfreich. Aber ohne sie wäre meine Vermutung, dass Sie dies im Vorher-Block für Ihre versagenden Tests vermissen:

%Vor%

Die Umleitung findet aufgrund der im Tutorial verwendeten Berechtigungslogik statt, ich denke, sie wird in 10.11 und 10.12 beschrieben.

Das ist eine häufige Sache, die ich in Controller-Tests mit auth sehe, hoffentlich ist das alles, was es auch für dich ist.

BEARBEITEN:

Vielen Dank für die Bereitstellung Ihres Codes.

Hier sind ein paar Dinge, die mir aufgefallen sind:

1.) Die Fehler 1-14, 19 sind darauf zurückzuführen, dass die Benutzerauthentifizierung nicht funktioniert, speziell signed_in ?. Sind Ihre Session-Controller-Tests erfolgreich? Sie sollten auf jeden Fall sicherstellen, dass diese bestanden werden, bevor Sie den Benutzer-Controller testen, da dies von dieser Funktionalität abhängt.

2.) Die Fehler 15-18 sind, weil Sie wahrscheinlich die Migration nicht erstellt haben, um das boolesche Attribut in Listing 10.35 hinzuzufügen - oder - Sie müssen die Migration für Ihre Testdatenbank ausführen: rake db:test:prepare

Entschuldigung, ich konnte nicht alle Ihre Probleme aufzeigen, aber hoffentlich gibt Ihnen das einen Schritt in die richtige Richtung.

    
bkempner 31.10.2011 22:02
quelle
0

Überprüfen Sie, ob deny_access in SessionsHelper vor dem private -Block definiert ist.

Das Buch hat einen Tippfehler, der besagt, dass Sie deny_access am Ende des Moduls eingeben sollten. Leider bedeutet dies, dass die Funktion als privat definiert ist.

%Vor%

Der korrigierte Code auf der Website von Railstutorial.org ist unten aufgeführt :

%Vor%     
Stuart B 20.11.2011 14:54
quelle
0

Ich hatte das gleiche Problem und verwende Rails 3.1.3. Das ist meine Lösung.

Stellen Sie zunächst beide sicher:

%Vor%

sind in sessions_helper.rb

Auch in sessions_helper.rb ändern:

%Vor%

bis

%Vor%

Noch eine Sache.

In spec_helper.rb ändern:

%Vor%

bis

%Vor%

Wenn das hilft, habe ich das Kapitel noch nicht fertiggestellt, aber das bringt mich durch 10.2.1. Jemand mit mehr Erfahrung kann kommentieren warum das funktioniert. Ich lese eine andere Lösung, die abhängig von before_filter schrieb um rspec zu übergeben.

    
Scott 22.11.2011 22:04
quelle
0

Haben Sie render_views call nach der obersten Ebene describe in der user_controller_spec?

    
Simon Bagreev 27.11.2011 21:07
quelle
0

Ich habe heute dasselbe Problem mit Schienen 3.1.3. Allerdings ging ich auf die github-Seite für die Railstutorial-Beispiel-App und bemerkte die sessions_helper.erb dort gab es einige Änderungen.

1.) Fügen Sie in der Methode sign_in (user) das Schlüsselwort 'self' zu 'current_user' hinzu:

%Vor%

2.) Dies gilt auch für die 'sign_out'-Methode. Fügen Sie das Schlüsselwort' self 'zu' current_user '

hinzu %Vor%

Ich habe keine weiteren Änderungen vorgenommen und alle Tests bestanden.

    
Brandon Thomason 27.11.2011 21:32
quelle