2015-01-09 8 views
13

मैं Rspec साथ ActiveJob और ActionMailer का परीक्षण करने के लिए इस कोड है ActiveJob के पास लंबित काम निष्पादित मैं कैसे वास्तव में सभी कतारबद्ध काममें 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

शायद यह https://medium.com/@chuckjhardy/testing-rails-activejob-with-rspec की सहायता करेगा -5c3de1a64b66 – CharlesJHardy

उत्तर

10

परीक्षण करने के लिए संख्या की जांच करने हो जाएगा उचित तरीके से अमल नहीं जानते आपके उदाहरण के रूप में कार्यरत नौकरियों की, और फिर प्रत्येक नौकरी अलग से जांचें। आप एकीकरण परीक्षण करना चाहते हैं तो आप 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

+3

क्या कोई इस बात का कम आकस्मिक उदाहरण दिखा सकता है कि यह मेलर के साथ कैसा दिखता है जो तर्क स्वीकार करता है? मुझे ऐसा लगता है कि यह 'OrderMailer.receipt_email (order.id)' जैसी चीज़ों के साथ काम नहीं कर रहा है। –

14

यहाँ कैसे मैं एक ऐसी ही समस्या हल है:

# 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 
+0

ग्रेट उत्तर। मैंने इसे spec/support में एक फ़ाइल में जोड़ा। ऐसा लगता है कि यह एकीकरण परीक्षण में ईमेल मानों का परीक्षण करने के लिए 100% आवश्यक है। – justingordon

 संबंधित मुद्दे