首页 > 解决方案 > 在 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进行单元测试。

如何模拟时间的流逝以在测试中触发超时?

标签: ruby-on-railsrubyunit-testingrspectimeout

解决方案


推荐阅读