如何测试已安排的作业(每个一分钟,cron“* * * * *”),但不等待 "real" 一分钟(rufus-scheduler vs 虚拟时间)?
How to test jobs which were scheduled (each one min, cron "* * * * *"), but not wait "real" one minute (rufus-scheduler vs virtual time)?
rufus-scheduler
lib允许我们安排任务
https://github.com/jmettraux/rufus-scheduler
require 'rufus-scheduler'
scheduler = Rufus::Scheduler.new
scheduler.cron '* * * * *' do
# do something every minute
end
事实上,当您想在 rufus-scheduler
上测试您的应用程序时,您需要休眠 real 1 min
,这对于典型测试来说太多了。
例如,在 Reactor(Java)
中,他们提供 StepVerifier.withVirtualTime
以避免长时间 运行 测试。`:
https://projectreactor.io/docs/core/release/reference/#_manipulating_time
-
RxJava - https://medium.com/@vanniktech/taking-control-of-the-time-when-testing-rxjava-code-91b2e5e88bdf
在 rufus-scheduler
或 Ruby
本身的测试中是否有任何时间操作选项?
当前解
rufus-scheduler
具有类型 in
,因此为了验证应用程序框架,我使用 in=0.001s
和 sleep 0.4
.
是的,测试需要半秒,但这比 1 分钟要好得多。
看看
- https://github.com/travisjeffery/timecop
- https://andycroll.com/ruby/replace-timecop-with-rails-time-helpers-in-rspec/
或其他 "time travel" 工具。
我在 "only test your own code" 上支持@spickermann。
rufus-scheduler
lib允许我们安排任务
https://github.com/jmettraux/rufus-scheduler
require 'rufus-scheduler'
scheduler = Rufus::Scheduler.new
scheduler.cron '* * * * *' do
# do something every minute
end
事实上,当您想在 rufus-scheduler
上测试您的应用程序时,您需要休眠 real 1 min
,这对于典型测试来说太多了。
例如,在 Reactor(Java)
中,他们提供 StepVerifier.withVirtualTime
以避免长时间 运行 测试。`:
https://projectreactor.io/docs/core/release/reference/#_manipulating_time
RxJava - https://medium.com/@vanniktech/taking-control-of-the-time-when-testing-rxjava-code-91b2e5e88bdf
在 rufus-scheduler
或 Ruby
本身的测试中是否有任何时间操作选项?
当前解
rufus-scheduler
具有类型 in
,因此为了验证应用程序框架,我使用 in=0.001s
和 sleep 0.4
.
是的,测试需要半秒,但这比 1 分钟要好得多。
看看
- https://github.com/travisjeffery/timecop
- https://andycroll.com/ruby/replace-timecop-with-rails-time-helpers-in-rspec/
或其他 "time travel" 工具。
我在 "only test your own code" 上支持@spickermann。