Я пишу регрессионные тесты для части приложения Rails, которая выглядит следующим образом:
Timeout.timeout(mode == :index ? 6 : 45) do
imap = Net::IMAP.new(...)
end
Я хочу проверить это в каждом случае (, т. Е. mode == :index
& mode != :index
), установлена правильная длина Timeout
.
Я пытался использовать ActiveSupport's 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
в модульном тесте.
Как я могу имитировать прохождениевремя срабатывания таймаута в тесте?