使用 sidekiq `perform_in` 方法时使用水豚编写功能测试
Write a feature Test using capybara when using sidekiq `perform_in` method
我能找到的大多数相关内容都是关于测试后台作业是否已安排,如 问题。
但是,我需要编写一个实际等待后台作业执行的功能测试,所以假设:
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)
这不是我需要的...我需要在作业执行后在带有水豚的页面上进行断言
您可以结帐rspec-sidekiq
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/ or in the sidekiq wiki and code at https://github.com/mperham/sidekiq/wiki/Testing and https://github.com/mperham/sidekiq/blob/master/lib/sidekiq/testing.rb
阅读更多相关信息
我能找到的大多数相关内容都是关于测试后台作业是否已安排,如
但是,我需要编写一个实际等待后台作业执行的功能测试,所以假设:
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)
这不是我需要的...我需要在作业执行后在带有水豚的页面上进行断言
您可以结帐rspec-sidekiq
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/ or in the sidekiq wiki and code at https://github.com/mperham/sidekiq/wiki/Testing and https://github.com/mperham/sidekiq/blob/master/lib/sidekiq/testing.rb