2012-02-28 20 views
16

Devise'yi test etmeye yeni başladım. Ben neden ben bu hatayı ::yakalanma atışı: Devise Testinde başlangıç ​​müdürü

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

Bu benim spec kod ::

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 

kimse bu soruna bir düzeltme kazanılmış Has olduğunu alıyorum anlamak alamıyorum? Biliyorum github ile ilgili sorunlar var ama onların durumunda include Devise::TestHelpers benim durumumdan farklı olarak mevcut değildi.

ben bu hat :: Bu çok eski bir sorudur bkz subject.current_user.should_not be_nil

+0

Bu sorun için bir düzeltme buldunuz mu? – Zabba

+0

@Zabba, ben sadece fabrikadan kullanıcı yüklemesini çaldım ve esas olarak iki şey yaptım. '' 1) '' Bunun bir entegrasyon testi olmadığından emin olun ve '' '' '' '' '' '' 'ControllerMacros' '' login_user'' fonksiyonunu çağırın. – ktkaushik

cevap

56

üzerinde bir hata alıyorum ama benzer bir sorun karşılaştım. Bu bana yardım etti.

confirmable modülünü kullanıyorsanız, kullanıcıyı onaylamayı unutmayın; aksi halde, Warden istisnası atılır. Kodunuza Uygun değişiklik olacaktır: authenticate_user! başarısız olduğunda Devise Wiki

+4

BTW '' user.confirm! ' confirm_at ve kaydetme için shorthand. – mahemoff

+1

Büyük bulmak, bu cevap kabul edilmesi gerekiyor @ktkaushik – jbnunn

+1

Ben fikstür ile ilgili bir sorun vardı: Bu bir https://gist.github.com/henrydjacob/1344451 çalışır –

2

uncaught throw :warden olur içinde

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 

fazla bilgi bulunamadı.

Kullanıcı kimliğinizin neden başarısız olduğunu anlayın ve sorununuzu çözmüş olacaksınız.