2012-02-29 9 views
4

私はDeviseをレールアプリで使用しています。ユーザと管理者はDeviseでログアウトし、RSPECでテストする

私は2つのモデルがあります:ユーザーと管理者。

現在、私は私がユーザーのサインとで管理記号を訪問した場合、ユーザーと管理者の両方としてログインすることができています。

私は他の徴候であれば1のログアウトを強制したいと思います。何それを行う最善の方法は?

また、誰かがrspec/capybaraでそれをテストする良い方法があれば、共有してください!私が考案コントローラ上でコピーして、そのようにフィルタの前に追加します

おかげ

答えて

5

class Users::SessionsController < Devise::SessionsController 

    before_filter :logout_admin, :only => "create" 

    def create 
    super 
    end 

    private 

    def logout_admin 
    # change :admin to :user in the admin's session controller 
    # the sign_out is a devise controller helper that forces sign out 
    sign_out :admin 
    end 

end 

は、その後の試験のためにあなたは、件名を呼び出すことによって、機能(コントローラ)仕様で、現在のユーザーにアクセスすることができます.current_userまたはsubject.current_admin、ここに行く:私はこれが動作すると思います

require 'spec_helper' 

describe Users::SessionsController do 
    login_admin 

    describe "POST create" do 
    it "should logout admin" do 
     post :create, {:user => {:email => "[email protected]", :password => "secret"} } 
     subject.current_user.should_not be_nil 
     subject.current_admin.should be_nil 
    end 
    end 
end 
+0

https://github.com/plataformatec/deviseをテストヘルパーを含めることを確認するためには、このような何かを試してみてください。あなたはカピバラでこのようなことをどうやってテストしますか?それにも特定のヘルパーはいますか? – jignesh

+0

ahh、良い質問、あなたがリクエスト仕様からcurrent_userにアクセスできないと知っている限り(そしてそれはおそらくベストプラクティスでもないでしょう)、アプリのビューの一部は、ユーザーがログインしているときとは異なる管理者、または何らかの種類のフラッシュ[:通知]を使って区別することができますか? –

+0

上記のコード例では、subject.current_userのどちらかを実行できませんでしたか?私はflash /:noticeを使って、ユーザー/管理者にサインインされたことを知らされました。私はcapybaraでそれをキャプチャすることができました。 – jignesh

関連する問題