如何测试Devise的'超时'模块?

时间:2016-04-14 00:03:58

标签: ruby-on-rails testing devise

我正在尝试使用Devise在我的Rails 4.2应用程序中测试会话超时。我在相关模型中添加了:timeoutable。我已添加Devise::TestHelpers,我在测试中使用了sign_insign_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

2 个答案:

答案 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

这对我有用...