如何使mock消耗一些时间rspec



我希望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

相关内容

  • 没有找到相关文章

最新更新