ActiveJobとActionMailerをRspecでテストするためのこのコードがあります。キューに入れられたすべてのジョブを実際に実行する方法がわかりません。
describe 'whatever' do
include ActiveJob::TestHelper
after do
clear_enqueued_jobs
end
it 'should email' do
expect(enqueued_jobs.size).to eq(1)
end
end
これが私が同様の問題を解決した方法です:
# Rails_helper.rb
RSpec.configure do |config|
config.before :example, perform_enqueued: true do
@old_perform_enqueued_jobs = ActiveJob::Base.queue_adapter.perform_enqueued_jobs
@old_perform_enqueued_at_jobs = ActiveJob::Base.queue_adapter.perform_enqueued_at_jobs
ActiveJob::Base.queue_adapter.perform_enqueued_jobs = true
ActiveJob::Base.queue_adapter.perform_enqueued_at_jobs = true
end
config.after :example, perform_enqueued: true do
ActiveJob::Base.queue_adapter.perform_enqueued_jobs = @old_perform_enqueued_jobs
ActiveJob::Base.queue_adapter.perform_enqueued_at_jobs = @old_perform_enqueued_at_jobs
end
end
次に、仕様で使用できます。
it "should perform immediately", perform_enqueued: true do
SomeJob.perform_later
end
テストする適切な方法は、例のようにキューに入れられたジョブの数を確認してから、各ジョブを個別にテストすることです。統合テストを行いたい場合は、perform_enqueued_jobsヘルパーを試すことができます。
describe 'whatever' do
include ActiveJob::TestHelper
after do
clear_enqueued_jobs
end
it 'should email' do
perform_enqueued_jobs do
SomeClass.some_action
end
end
end
ActiveJob :: TestHelper docs を参照してください