我正在尝试使用Devise在我的Rails 4.2应用程序中测试会话超时。我在相关模型中添加了:timeoutable
。我已添加Devise::TestHelpers
,我在测试中使用了sign_in
和sign_out
。
以下是我尝试过的三件事,但都没有。我知道如果我明确地执行sign_out
而不是其中任何一个,测试成功(基本上,断言重定向到登录页面。)
我做错了什么?
使用ActiveSupport::Testing::TimeHelper
# before stuff
travel_to(later) do
# after stuff
end
使用Timecop
# before stuff
Timecop.travel(later)
# after stuff
使用存根
t = Time.now + later.minutes
# before stuff
Time.stubs(:now).returns t
# after stuff
答案 0 :(得分:0)
您是否也尝试过Timecop.scale
?
根据我的经验,并非Devise的所有方面都与Timecop配合得很好。现在,我遇到:timeoutable
的一些问题,timeout_in
上设置的值未考虑Timecop.freeze
日期。
答案 1 :(得分:0)
我注意到Timecop在Capybara的某些测试中与Devise配合良好,但在其他测试中却没有。区别在于,在正常工作的情况下,我使用capybara-mail
打开了一个模拟邮箱,而在不正常工作的情况下,我没有进行任何会导致页面重新加载而导致Devise的事情做它超时的事情。
所以代替:
before { Timecop.travel(Time.now + 31 * 60) }
尝试一下:
before do
Timecop.travel(Time.now + 31 * 60)
visit some_path
end
这对我有用...