2012-01-02 73 views
9

我想在我的Rails應用程序的水豚測試套件中使用rspec mocks來存檔已登錄的用戶(使用Devise/Warden)。這將節省大量時間,並且意味着我的測試套件可以/將定期運行。如何在水豚測試中用Rspec取消監督/設計

以前我能夠通過這樣的一些代碼磕碰了我的會話模型做到這一點使用authlogic:

def login(user) 
    user_session = mock_model(UserSession, {:user => user}) 
    UserSession.stub(:find).and_return(user_session) 
end 

現在,我使用的設計,我再也不用訪問UserSession對象。因爲我使用水豚來測試我的代碼,所以我沒有直接訪問請求對象來使用sign_in測試助手中構建的devise。

我的問題是:我怎樣才能模擬一個登錄的用戶與水豚,設計和規範嘲笑,而不需要每一個登錄用戶的情況下先登錄註冊路徑,填寫表格,提交,等待作出迴應,然後轉到所需的頁面?

+1

不是你問什麼,但以防萬一[login.rb](https://github.com/gitlabhq/gitlabhq /blob/master/spec/support/login.rb)和[sample_use.rb](https://github.com/gitlabhq/gitlabhq/blob/master/spec/requests/dashboard_issues_spec.rb) – clyfe 2012-01-02 22:10:49

+0

感謝您的回覆,我已經有了這樣的東西,我試圖避免。儘管你的評論對於那些未來的訪問者來說確實有幫助。 – Schneems 2012-01-02 22:17:19

回答

15

監獄長有自帶的測試助手。它允許你登錄,而不必在你的黃瓜測試中使用UI。只需將以下文件添加到您的項目中即可。

# features/support/warden.rb

Warden.test_mode! 
World Warden::Test::Helpers 
After { Warden.test_reset! } 

# features/step_definitions/user_steps.rb

Given /^I am logged in as a user$/ do 
    @current_user = User.create!(:username => 'user', :password => 'password') 
    login_as(@current_user, :scope => :user) 
end 

Use Wardens.test_mode! with Capybara

+0

我認爲這是正確的方向,但無法完全實現。助手方法可以正確調用,但current_user et。 al仍然沒有正確顯示在我的應用程序。這對你有用嗎? – Schneems 2012-01-04 00:30:10

+2

我需要指定我目前的範圍'login_as @current_user,:範圍=>:user'感謝您的幫助 – Schneems 2012-01-04 00:46:49

+1

也感謝鏈接到頁面水豚,其實我最後寫的是^ _^https://github.com/plataformatec /色器件/維基/操作方法: - 測試與 - 水豚/ _history – Schneems 2012-10-26 15:48:01