我想定製一段時間後,我的Rails應用程序將自動結束用戶的會話。測試使用RSpec設計會話超時時間
我發現this question給我正是我需要的,但我想通過TDD來解決這個問題。我已經爲應用程序提供了一個相對穩定的測試套件,但在測試用戶會話是否已過期時,我只是有點遺憾,除了在那裏進行測試並等待會話在x.minutes
過期後終止。當然有更好的方法。
我檢查了設計和守望者文檔,以幫助處理這個問題的測試助手幹起來。任何人有任何提示?
我想定製一段時間後,我的Rails應用程序將自動結束用戶的會話。測試使用RSpec設計會話超時時間
我發現this question給我正是我需要的,但我想通過TDD來解決這個問題。我已經爲應用程序提供了一個相對穩定的測試套件,但在測試用戶會話是否已過期時,我只是有點遺憾,除了在那裏進行測試並等待會話在x.minutes
過期後終止。當然有更好的方法。
我檢查了設計和守望者文檔,以幫助處理這個問題的測試助手幹起來。任何人有任何提示?
如何將殘片user.timedout?
返回true?或者,您可以在測試中傳遞超出自定義超時值的自定義時間,如user.timed_out?(31.minutes.ago)
。
默認情況下,設備設置超時時間爲30分鐘。 你可以使用user.timedout?([specify time in past])
例如:
user.timedout?(30.minutes.ago)
將返回false
user.timedout?(10.minutes.ago)
將返回true
,您可以檢查裏面的RSpec user.timedout?()
值。
,而不是與確切時間打經過:
由於設計是建立在監獄長,你可以模擬設計:: SessionsController已超時由監獄長::測試::傭工方式的用戶,要授予訪問權限Rack代理。
# settings_page_spec.rb
include Warden::Test::Helpers
it 'does not allow updating password after timed out' do
expect(current_path).to eq(user_settings_path(user))
clink_link 'Manage Password'
expect(page).to have_button('Update Password')
Warden.on_next_request do |proxy|
proxy.set_user(nil)
click_button 'Update Password'
expect(current_path).to eq(login_path)
end
end
你並不需要測試設計功能,如超時,因爲它在設計已經測試過的。 – boblin
你可以嘗試類似[timecop](https://github.com/travisjeffery/timecop)。這應該讓您在集成測試中啓動會話,然後快速轉發30分鐘並檢查它是否已過期。 –
[設計可超時測試](https://github.com/plataformatec/devise/blob/master/test/integration/timeoutable_test.rb)可能有線索。看起來他們稱'get expire_user_path(user)'來模擬超時,但是在我的RSpec測試中會出現「未定義的方法」錯誤。 –