2011-10-31 50 views
4

我正在使用黃瓜來測試我的rails 3.1應用程序,並且我正在使用設計進行身份驗證。 我需要測試當前用戶的電子郵件是否與授權過程中使用的電子郵件相同。 問題是設計助手在黃瓜步驟定義中不可用。設計助手在黃瓜步驟定義中不可用

有沒有解決方案可以在黃瓜步驟定義中使用devise助手?

我想這:

Cucumber::Rails::World.send('define_method', 'current_user') do 
    @current_user ||= (session[:user] && User.find(session[:user])) || :false 
end 

,但沒有幫助。

+0

您是否找到解決方案?我想知道這是否可能。 – KobeJohn

+0

最後我找不到任何解決方案。授權後,我有一些文本只有在您被授權後才能看到。所以我只是測試了這個文本的存在。 可能會有幫助 http://groups.google.com/group/plataformatec-devise/browse_thread/thread/b1916a741670a3f3/d2ebae6576f333c9?pli=1 – RomanKapitonov

+0

感謝您的更新。我處於類似的位置檢查元素,而不是感覺這是一種很好的做事方式。 – KobeJohn

回答

7

一下添加到需要使用它的步驟定義文件:

World(Devise::TestHelpers) 

雖然這使得「sign_in」和可用「SIGN_OUT」方法,它們實際上不能從黃瓜使用,所以這不適用。設計文件頂部的評論說:「不要在集成測試中使用Devise :: TestHelpers」。請參閱:https://github.com/plataformatec/devise/blob/master/lib/devise/test_helpers.rb

不幸的是,黃瓜步驟無法訪問Web請求對象和會話參數。看起來唯一的方法是在每個場景開始時重複執行登錄Web請求。無聊。我覺得很奇怪,黃瓜可以直接操作測試軌應用程序的數據庫,但不是Web請求/會話。在任何情況下,本後顯示的重構步驟一個很好的例子是可以被輕鬆許多步驟共享的模塊中:http://drnicwilliams.com/2009/04/15/cucumber-building-a-better-world-object/

如果任何人有一個場景是如何設置的登錄答案狀態,而不必做所有的水豚網電話,我很樂意聽到它。

0

你可以做到這一點存根日誌插件黃瓜: https://github.com/plataformatec/devise/wiki/How-To:-Test-with-Capybara

放線在支撐/ env.rb:

include Warden::Test::Helpers

After do Warden.test_reset! end

那麼你可以做:

user = create :user login_as :user, scope: :user

,則login_as助手不將您重定向到下一個頁面爲您登錄後,它只是記錄你在

所以你必須。明確地轉到您正在以登錄用戶身份測試的下一頁。

所以,你必須做另一個明確的做法,例如, visit '/'