2010-11-19 50 views
3

我正在使用RSpec 2處理Rails 3 Web應用程序,我們正在使用Devise進行身份驗證。我們的控制器中的一個(很快)很多都需要用戶登錄。我知道Devise提供了sign_in測試助手,但它可以與RSpec或Mocha模擬對象一起使用嗎?Mocks與RSpec和Devise不兼容

我最初試過@user = mock_model(User)其中user是Devise類。這不適用於sign_in :user, @user,因爲get 'index'會重定向到登錄表單。

有沒有人有任何與設計測試經驗,並可以提供幫助?

+0

同樣的問題... – Meltemi 2010-12-13 21:07:51

回答

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 2011-03-06 14:43:27

1

我遇到了同樣的問題。我現在正在做以下事情:

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

模擬是永遠不會工作。當你說登錄時,用戶存儲在會話中(基本上,用戶類和它的ID)。當您訪問控制器時,將根據存儲的數據檢索另一個用戶對象。解決問題的最好方法是使用持久對象的東西,比如Factory Girl。

相關問題