2012-02-28 8 views
16

Właśnie rozpocząłem testowanie Devise. Jestem w stanie zrozumieć, dlaczego otrzymuję ten błąd ::rzut niezagrożony: strażnik w testach devise

Failure/Error: subject.current_user.should_not be_nil 
ArgumentError: 
    uncaught throw :warden 

jest to kod w mojej specyfikacji ::

require "spec_helper" 

    describe Devise::PasswordsController do 
     include Devise::TestHelpers 
     before(:each) do 
      user = Factory(:user) 
      @request.env["devise.mapping"] = Devise.mappings[:user] 
      sign_in user 
     end 
     it "should have a current user" do 
       subject.current_user.should_not be_nil 
     end 
    end 

Czy ktoś dostał naprawić ten problem? Wiem, że są problemy na github, ale w ich przypadku include Devise::TestHelpers nie było obecne inaczej niż w moim przypadku.

Otrzymuję błąd na tej linii :: subject.current_user.should_not be_nil

+0

Czy znalazłeś poprawkę na ten problem? – Zabba

+0

@Zabba, tak, właśnie zrzuciłem użytkownika ładującego z fabryki i głównie zrobiłem dwie rzeczy. '' 1) '' Upewnij się, że to nie jest test integracji i '' 2) '' wywołaj funkcję z ** ControllerMacros ** '' login_user'' – ktkaushik

Odpowiedz

56

widzę to bardzo stare pytanie, ale natknąłem się na podobny problem. To mi pomogło.

Jeśli korzystasz z modułu confirmable, nie zapomnij o potwierdzeniu użytkownika, w przeciwnym razie zostanie zgłoszony wyjątek Warden. Odpowiednie zmiany do kodu będzie:

before(:each) do 
    user = Factory(:user) 
    user.confirmed_at = Time.zone.now 
    user.save 
    @request.env["devise.mapping"] = Devise.mappings[:user] 
    sign_in user 
end 

Więcej informacji można znaleźć w Devise Wiki

+4

BTW możesz po prostu zrobić 'user.confirm!' As skrót dla potwierdzonego i zapisania. – mahemoff

+1

Świetne znalezisko, ta odpowiedź musi być zaakceptowana @ktkaushik – jbnunn

+1

Miałem problem z urządzeniem: ten działa https://gist.github.com/henrydjacob/1344451 –

2

uncaught throw :warden się dzieje, gdy authenticate_user! zawiedzie.

Dowiedz się, dlaczego uwierzytelnienie użytkownika jest wadliwe i rozwiążesz problem.