ruby-on-rails - 在 RSpec 中模拟超时?
问题描述
我正在为 Rails 应用程序的一部分编写回归测试,如下所示:
Timeout.timeout(mode == :index ? 6 : 45) do
imap = Net::IMAP.new(...)
end
我想验证在每种情况下(即 mode == :index
& mode != :index
),设置了正确的Timeout
长度。
我尝试使用ActiveSupport 的travel
:
allow(Net::IMAP).to receive(:new).and_wrap_original do |m, *args|
travel 6
m.call(*args)
end
expect { method }.to raise_error(Timeout::Error)
但它不会触发超时。如果我改用sleep
它,它确实有效,但显然,我没有sleep 45
进行单元测试。
如何模拟时间的流逝以在测试中触发超时?
解决方案
推荐阅读
- python - PyQt5:使用事件绘制多个矩形
- sql - Wrongly closed SQL parentheses
- javascript - How to Enable FilterView after creating it in Sheets API
- javascript - jquery 购物车值 onchange
- html - VBA Web Scraping:对象变为空(getelementbyID)
- c# - ASP.NET Core 应用程序部署到自己的服务器错误
- r - 传单搜索框不返回任何结果
- java - Android Application Error on background task only in Release Mode
- powershell - Iterate thru SubjectOrBodyContainsWords of an Exchange transport rule
- javascript - 未捕获的类型错误:$(.remove).live 不是函数