2015-01-09 14 views
13

tôi có mã này để kiểm tra ActiveJob và ActionMailer với RSpec Tôi không biết làm thế nào thực sự thực hiện tất cả công việc enqueuedExecute cấp phát công việc với ActiveJob trong 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 
+0

Có thể điều này sẽ giúp https://medium.com/@chuckjhardy/testing-rails-activejob-with-rspec -5c3de1a64b66 – CharlesJHardy

Trả lời

10

Cách thích hợp để kiểm tra sẽ kiểm tra số của các công việc enqueued như trong ví dụ của bạn, và sau đó kiểm tra từng công việc một cách riêng biệt. Nếu bạn muốn làm thử nghiệm tích hợp bạn có thể thử perform_enqueued_jobs helper:

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 

Xem ActiveJob::TestHelper docs

+3

Ai đó có thể cho thấy một ví dụ ít giả tạo về điều này trông như thế nào với một bưu phẩm chấp nhận các đối số? Tôi không thể có được điều này để làm việc với một cái gì đó như 'OrderMailer.receipt_email (order.id)'. –

14

Dưới đây là cách tôi giải quyết một vấn đề tương tự:

# 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 

Sau đó, trong thông số kỹ thuật, chúng tôi có thể sử dụng:

it "should perform immediately", perform_enqueued: true do 
    SomeJob.perform_later 
end 
+0

Câu trả lời hay. Tôi đã thêm tệp này vào tệp trong thông số kỹ thuật/hỗ trợ. Dường như điều này là cần thiết 100% để kiểm tra các giá trị email trong các bài kiểm tra tích hợp. – justingordon

Các vấn đề liên quan