使用sidekiq"perform_in"方法时,使用水豚编写一个功能测试



我能找到的大多数相关内容都是关于测试后台作业是否像这个问题一样安排的。

然而,我需要编写一个功能测试,它实际上等待后台作业的执行,所以让我们说:

BatchWorker.perform_in(30.minutes)

我需要编写一个功能测试,根据30分钟后执行的作业的结果做出一些断言。如何做到这一点?

更新

只是为了澄清。。。我不需要测试作业是否已入队,例如,使用rspec-sidekiq-gem,您可以执行类似的操作

Awesomejob.perform_in 30.minutes, 'Awesome', true
# test with...
expect(AwesomeJob).to have_enqueued_sidekiq_job('Awesome', true).in(30.minutes)

这不是我需要的。。。工作完成后,我需要在页面上用水豚做一个断言。

我假设你实际上不想在测试期间等待30分钟,而是想立即执行作业(否则你只睡30分钟,但实际上什么都没得到(。Sidekiq适配器有许多方法可以帮助实现这一点,例如Sidekiq::Testing.fake!Sidekiq::Testing.inline!。在您的情况下,对于这个测试,您似乎希望使用inline!以便立即执行作业。

require "sidekiq/testing"
Sidekiq::Testing.inline!

如果使用fake!,则需要调用drain_all才能执行排队作业。你可以在https://sloboda-studio.com/blog/testing-sidekiq-jobs/或在sidekiq wiki中,代码位于https://github.com/mperham/sidekiq/wiki/Testing和https://github.com/mperham/sidekiq/blob/master/lib/sidekiq/testing.rb

您可以签出rspec sidekiq

Awesomejob.perform_in 30.minutes, 'Awesome', true
# test with...
expect(AwesomeJob).to have_enqueued_sidekiq_job('Awesome', true).in(30.minutes)

最新更新