2012-03-06 1 views
17

私は、私のstandart RailsユニットテストをRSpecに移行しています。私はdeviseに問題があります。 devise認証を含むすべてのコントローラがRSpecで失敗しています。RSpecとdevise:sign_inの管理ができません

私は成功せず、工夫のチュートリアル以下のRSpecの中に管理者をsign_inしよう:ここ

https://github.com/plataformatec/devise/wiki/How-To:-Controllers-and-Views-tests-with-Rails-3-(and-rspec)

は、私が試したものです:

/spec/controllers/ipad_tech_infos_controller_spec.rb

before :each do 
    @request.env["devise.mapping"] = Devise.mappings[:admin] 
    @admin = FactoryGirl.create :admin 
    sign_in @admin 
end 

/spec/support/devise.rb

RSpec.configure do |config| 
    config.include Devise::TestHelpers, :type => :controller 
end 

/spec/factories/admin.rb

FactoryGirl.define do 
    factory :admin do 
    email "[email protected]" 
    password "foobar" 
    password_confirmation {|u| u.password} 
    end 
end 

私のモデルはすべての私のコントローラの仕様は失敗している、確認できていません。

before_filterを削除すると:authenticate_admin!すべての私のテストは合格します。

誰でも手伝いできますか?

答えて

21

おそらく原因:コントローラ仕様でセッションを明示的に設定していないことを確認してください。

たとえば、デフォルトのRspecスキャフォールドジェネレータを使用している場合、生成されたコントローラ仕様はセッションパラメータを渡します。

get :index, {}, valid_session 

これらは、考案者のヘルパーはウォーデンでログインするように設定セッション変数を上書きしています。最も簡単な解決策は、それらを削除することです。また

get :index, {} 

、あなたの代わりに工夫のヘルパーを使用するのではなく、手動でウォーデンセッション情報を設定することができます。

+0

感謝を! – vdaubry

+0

あなたの管理者がユーザファクトリにネストされている場合は、 'sign_in:user、@ admin'という' sign_in(scope、resource) 'のように呼び出す必要があります。 – Arel

3

あなたは「私のモデルは確認できません」と言ったので、以下はあなたには当てはまりませんが、他の人が見逃すかもしれない微妙なことがあります。 RSpecの/考案ハウツーそのvdaubryで

注上記言及し、それはあなたがあなたのモデルで有効になって考案「確認できる」モジュールを持っている場合は、あなたがsign_in @admin@admin.confirm!権利を呼び出す必要がどちらかと言う、または他のことを確認してくださいあなたの工場は@adminを作成するときにconfirmed_atに設定されます。これを行わないと、sign_inコールは黙って失敗し、その後のすべての仕様は、ログインしていない場合と同じように動作します。

関連する問題