我的一些功能规格间歇性地失败了。我们的规格将基线设置为过去。我发现了以下内容:
- 抛出的错误是:
UncaughtThrowError(未捕获的抛出:warden):
[#B3FBC85E07A6] 设计 (4.3.0) lib/devise/hooks/timeoutable.rb:26:in 'throw'
[#B3FBC85E07A6] 设计 (4.3.0) lib/devise/hooks/timeoutable.rb:26:in 'block in'
[#B3FBC85E07A6] 守望者 (1.2.7) lib/warden/hooks.rb:15:in 'block in _run_callbacks'
[#B3FBC85E07A6] 监狱长 (1.2.7) lib/warden/hooks.rb:10:in 'each'
[#B3FBC85E07A6] 监狱长 (1.2.7) lib/warden/hooks.rb:10:in '_run_callbacks'
[#B3FBC85E07A6] 监狱长 (1.2.7) lib/warden/manager.rb:52:in '_run_callbacks'
[#B3FBC85E07A6] 监狱长 (1.2.7) lib/warden/proxy.rb:180:in 'set_user'
[#B3FBC85E07A6] 守望者 (1.2.7) lib/warden/test/helpers.rb:21:in 'block in login_as'
[#B3FBC85E07A6]warden (1.2.7) lib/warden.rb:40:in 'block in test_mode!'
[#B3FBC85E07A6] 守望者 (1.2.7) lib/warden/hooks.rb:15:in 'block in _run_callbacks'
[#B3FBC85E07A6] 监狱长 (1.2.7) lib/warden/hooks.rb:10:in 'each'
[#B3FBC85E07A6] 监狱长 (1.2.7) lib/warden/hooks.rb:10:in '_run_callbacks'
[#B3FBC85E07A6] 监狱长 (1.2.7) lib/warden/manager.rb:52:in '_run_callbacks'
...
- 仅在我使用 Timecop 时失败
查看错误(在 timeoutable.rb 中引发了异常)和 Timecop 的常见用法,我认为这是负责任的 - 但我无法解释它为什么会发生,也无法解释为什么它是间歇性的。
这是一个示例代码,可以进一步解释该问题:
Timecop.travel(10.weeks.from_now) do sign_in(user) visit some_path expect(page).to have_title('something') # ... and more end
请注意,尽管在时间旅行后登录,但有时仍会出现错误。
一切正常,实际上这个测试(和其他几个)最多每 50 多次失败 1 次。
任何帮助深表感谢。提前致谢。