我能找到的大多数东西都是关于测试背景作业是否像这问题一样被排定的。
但是,我需要编写一个特性测试,它实际上等待后台作业的执行,因此,让我们假设:
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)这不是我需要的..。在执行任务后,我需要在页面上声明一下。
发布于 2021-04-27 16:06:35
我假设您实际上不想在测试期间等待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上阅读更多有关这方面的内容。
发布于 2021-04-27 09:45:09
您可以签出rspec-sidekiq
Awesomejob.perform_in 30.minutes, 'Awesome', true
# test with...
expect(AwesomeJob).to have_enqueued_sidekiq_job('Awesome', true).in(30.minutes)https://stackoverflow.com/questions/67276737
复制相似问题