我希望rspec消耗一定的时间,然后返回。例如,下面的逻辑行表示我希望rspec模拟对some_method
的调用,并在1秒后返回true。这可能吗?
expect(MyClass).to receive(:some_method).consume_time(1).and_return(true)
使用timecop
来操作时间。使用一个块来模拟方法体。
expect(MyClass).to receive(:some_method) do
Timecop.travel(Time.now + 1)
true
end
请注意,如果您模拟some_method
来测试其他可能应该是allow
的东西。
使用Timecop
而不使用block具有全局效果。一定要调用Timecop.return
来重置时间流,也许在after
钩子中确保它发生。你甚至可以将它全局地添加到RSpec中,这样你就不会忘记了。
RSpec.configure do |config|
config.after { Timecop.return }
end
使用一个块来模拟方法体。
expect(MyClass).to receive(:some_method) do
sleep(1)
true
end