Die meisten meiner Tests sprechen Folgendes an und ich verstehe nicht warum. Alle Methoden rufen den Fehler 'Authentifizierung' auf. Ich habe den Code überprüft, wenn es eine Methode namens "authentifizieren" gab, aber es gibt keine solche Methode.
1) Admin::CommentsController handling GET to index is successful
Failure/Error: get :index
undefined method `authenticate!' for nil:NilClass
# ./spec/controllers/admin/comments_controller_spec.rb:9:in `block (3 levels) in <top (required)>'
124) PostsController handling GET for a single post should render show template
Failure/Error: get :show, :year => '2008', :month => '01', :day => '01', :slug => 'a-post'
undefined method `authenticate' for nil:NilClass
# ./app/controllers/application_controller.rb:18:in `set_current_user_for_model'
# ./spec/controllers/posts_controller_spec.rb:131:in `do_get'
# ./spec/controllers/posts_controller_spec.rb:140:in `block (3 levels) in <top (required)>'
Das Projekt finden Sie dort => https://github.com/agilepandas/enki, falls Sie die Tests selbst durchführen möchten.
Ich bin mir bewusst, dass Sie Rspec verwenden, aber Sie können auf dasselbe Problem mit stoßen
Test::Unit
. Sie müssen nur die Testhelfer hinzufügentest/test_helper.rb
quelle
Die obige Antwort hat bei mir nicht funktioniert (RSpec 3.1)
Unter https://stackoverflow.com/a/21166482/1161743 finden Sie eine Lösung, die für mich funktioniert hat.
Sie müssen einen anonymen Benutzer abmelden, bevor Sie Variablen einrichten:
quelle
in RSpec
wie Jeffrey W. in seiner obigen Antwort erwähnt hat -> um dies auf alle Controller einzustellen:
Wenn dies jedoch nur für eine Spezifikation relevant ist, müssen Sie nicht unbedingt Entwicklungshelfer in alle Controller-Spezifikationen aufnehmen. Sie können diese Helfer nur explizit in diesen einen Controller-Beschreibungsblock aufnehmen:
quelle
Ich hatte die gleichen Fehler in einem meiner Projekte. Es verwendet Ruby 2.0.0-p598, Rails 3.2.21, RSpec 2.99. Wenn ich alle Spezifikationen zusammen ausführe, ist das Problem aufgetreten. Wenn ich die Spezifikationen einzeln ausführte, bestanden sie. Ich habe Folgendes in meiner spec / spec_helper.rb enthalten:
Ich habe der ersten Beschreibung in jeder fehlerhaften Spezifikationsdatei Folgendes hinzugefügt. Das Problem wurde dadurch nicht behoben:
Weder tat:
Ich ließ mich von der Antwort auf diese Frage zum Stapelüberlauf inspirieren und führte verschiedene Kombinationen von rspec-Verzeichnissen zusammen aus, um herauszufinden, welche sich gegenseitig stören könnten. Am Ende stellte ich fest, dass ich anrief:
als ich alle Vorkommen davon geändert habe zu:
Alle Spezifikationen wurden ohne Fehler bestanden:
Ich hoffe, das hilft anderen.
quelle
Wenn Sie mit der Ansichtsspezifikation arbeiten, können Sie von stub
current_user
. Dies überschreibt effektiv dencurrent_user
aus Ihrer Sicht aufgerufenen Helfer mit dem, was zurückgegeben wird. So geht's mit rspec-3.2.3:quelle
Es sieht so aus, als ob es einige Aktualisierungen des Quellcodes gibt. Der ApplicationController gibt an, dass
authenticate_user!
vor jeder Anforderung ein Filter ausgeführt werden muss. Dieser Thread bietet Hintergrundinformationen zu Problemen:http://groups.google.com/group/plataformatec-devise/browse_thread/thread/f7260ebe2d9f7316?fwc=1
Im Wesentlichen ist die
authenticate_user!
Funktion Teil von Rails 3 (unter Verwendung der neuendevise
Funktion, über die ich wenig weiß). Wenn die App das Benutzermodell nicht finden kann (entweder aufgrund von Namespace-Problemen oder aus irgendeinem Grund), schlägt die Methode fehl. Die von Ihnen verknüpfte "enki" -Anwendung ist jetzt eine Rails 3-Anwendung. Es könnte ein paar wachsende Schmerzen haben, wenn es sich umwandelt.quelle
Ruby sagt Ihnen, dass diese Methode
#authenticate
noch nicht definiert wurdenil
. Sie können es einfach tun, indem Sie:Und der Fehler wird verschwinden.
quelle