2012-06-12 4 views
8

In unserer App rails 3.1.4 wird verwendet, um die öffentliche Methode require_signin im Application Controller zu testen. Hier ist die Methode require_signin:RunTimeError: ActionController :: RackDelegation in rspec 2.10.1 für Schienen 3.1.4 application controller

def require_signin 
    if !signed_in? 
     flash.now.alert = "Log in first!" 
     redirect_to signin_path 
    end 
    end 

Hier ist der rspec Code:

it "should invoke require_signin for those without login" do 
    controller.send(:require_signin) 
    controller {should redirect_to signin_path} 
end 

Die obige rspec erzeugt gigantischen Multi-Seiten Fehler wie unten beginnend:

RuntimeError:←[0m 
     ←[31mActionController::RackDelegation#status= delegated to @_response.status=, but @_response is nil: #<ApplicationController:0x3 
a67f10 @_routes=nil, @_action_has_layout=true, @_view_context_class=nil, @_headers={"Content-Type"=>"text/html"}, @_status=200, @_reques 
t=#<ActionController::TestRequest:0x3a68720 @env={"rack.version"=>[1, 1], "rack.input"=>#<StringIO:0x34fad60>, ........ 

Was könnte falsch sein mit dem Code rspec? Vielen Dank.

+0

eine Prämie please. Ich brauche diese Antwort auch – tekknolagi

Antwort

0

Vielleicht nicht ganz nützlich, aber ich kam hierher, nachdem ich den gleichen Fehler bekommen habe. Ich mit einem vorübergehenden Testsuite gestartet, einige Änderungen vorgenommen, und begann dann Fehler wie immer:

RuntimeError: 
    ActionController::RackDelegation#status= delegated to @_response.status=, but @_response is nil: 
    ...many lines... 

Nach einem genaueren Blick auf den Fehlern einnehmenden, bemerkte ich, dass es irgendwo gesagt:

@flashes={:alert=>"You have to confirm your account before continuing."} 

I hatte gerade die :confirmable Option in Devise hinzugefügt, und erkannte, dass alle Benutzer, die ich erstellte, dass ich versuchte, als unbestätigt, und als solche nicht erfolgreich anmelden konnten. Ich musste confirmed_at Time.now zu meiner Factory/Fixture-Erstellung für Benutzer hinzufügen . In Ihrem Beispiel scheint es, als ob Sie versuchen, zu testen, wenn Sie nicht angemeldet sind, also bin ich mir nicht sicher, ob dies notwendig ist.

3

Ich stieß auf diesen Fehler und erkannte, dass ich eine Umleitung auf dem Controller ausgelöst hatte, indem ich eine Hilfsmethode anrief, die ich testen wollte, aber ich hatte noch keine Testanfrage instanziiert. Rufen Sie get :index vor dem Aufruf der Erwartung wurde der Fehler los.

it "redirects if some condition" do 
    subject.send(:helper_method) 
    get :action # <= Need this before setting expectation below 
    response.should redirect_to("/somewhere") 
end 
+0

Danke aus der Zukunft! Das hat das Problem für mich behoben. – taylorthurlow

0

Wenn Sie Aktion Mechanik überprüfen möchten, sollten Sie should_receive vor einem send Anruf wie diese verwenden

it "should redirect to signin_path" do 
    controller.should_receive(:redirect_to).with(signin_path) 
    controller.send(:require_signin) 
end 
Verwandte Themen