23

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
4

3 に答える 3

26

同様の問題を解決した方法は次のとおりです。

# 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
于 2015-04-30T12:10:08.380 に答える
24

テストする適切な方法は、例のようにキューに入れられたジョブの数を確認し、各ジョブを個別にテストすることです。統合テストを行いたい場合は、 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 ドキュメントを参照してください

于 2015-01-10T14:07:55.047 に答える