【问题标题】:How to test Devise's 'timeoutable' module?如何测试设计的“超时”模块?
【发布时间】:2016-04-14 00:03:57
【问题描述】:

我正在尝试使用 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

【问题讨论】:

    标签: ruby-on-rails testing devise


    【解决方案1】:

    你也试过Timecop.scale吗?

    根据我的经验,并非 Devise 的所有方面都与 Timecop 配合得很好。现在,我遇到了:timeoutable 的一些问题,timeout_in 上设置的值没有考虑Timecop.freeze 日期。 ?

    【讨论】:

      【解决方案2】:

      我注意到 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

      这对我有用...

      【讨论】:

        猜你喜欢
        • 2015-02-13
        • 2010-11-02
        • 2022-10-08
        • 1970-01-01
        • 2018-05-25
        • 2011-06-02
        • 1970-01-01
        • 1970-01-01
        • 2017-09-27
        相关资源
        最近更新 更多