2010-11-19 9 views
3

RSpec 2でRails 3 Webアプリケーションを使用していますが、私たちは認証にDeviseを使用しています。私の知っているのは、sign_inのテストヘルパーですが、RSpecやMochaモックオブジェクトで使うことができますか?モックがRSpecとDeviseで動作していない

私はもともと、ユーザーがDeviseクラスの@user = mock_model(User)を試しました。 get 'index'がサインインフォームにリダイレクトされるため、これはsign_in :user, @userでは機能しません。

誰でもDeviseでのテスト経験があり、助けてもらえますか?

+0

同じ問題... – Meltemi

答えて

5

私たちは同様の問題を抱えていましたが、Factory Girlを使用しました。私たちは、そのようにそれを解決:spec_helper.rbで

config.include Devise::TestHelpers, :type => :controller 

コントローラの仕様(単なるラッパーメソッド)の場合:

def login_user(user) 
    sign_in user 
end 

次に、あなたが行うことができますあなたが必要とそれぞれの方法で:

login_user(Factory(:user)) 

... factories.rbでユーザーオブジェクトを定義しています。これがモックでうまくいくかどうかはわかりません。

+0

!それは間違った悪いアドバイスを読んで何時間も節約しました。 – mhenrixon

1

同じ問題が発生しました。私は今のところ次のようなことをしています:

before(:each) do 
    # sign_in mock_user 
    request.env['warden'] = mock(Warden, :authenticate => mock_user, 
             :authenticate! => mock_user) 
end 
2

モックが決して機能しません。サインインすると、ユーザーはセッション(基本的にユーザークラスとそのID)に格納されます。コントローラにアクセスすると、格納されたデータに基づいて別のユーザオブジェクトが取得されます。問題を解決する最善の方法は、Factory Girlのようなオブジェクトを持続させるものを使用することです。

関連する問題