2016-11-30 127 views
5

我正在使用rspec編寫控制器測試,並在完成操作後,我的工作應該發送電子郵件給管理員用戶。但我想爲我的測試禁用這項工作或以某種方式模擬它。我怎樣才能做到這一點?禁用軌道上的紅寶石作業進行測試

我正在使用delayed_job_active_record + daemons寶石。

class AdminNotificationJob < ActiveJob::Base 
    queue_as :default 

    def perform(method, parameter) 
    User.admin.includes(:profile).each do |admin| 
     AdminMailer.send(method, admin, parameter).deliver_later 
    end 
    end 
end 

回答

7
#config/environment/test.rb 
config.active_job.queue_adapter = :test 

# in spec 
expect { 
    your_action_that_triggers_job_enqueuing 
}.to have_enqueued_job(AdminNotificationJob).with(your_arguments) 
+1

config.active_job.queue_adapter =發現#have_enqueued_job方法:測試 - 這就是我尋找,謝謝! – divideByZero

1

你的控制器測試應該是這樣的:

it "enqueues a AdminNotification" do 
    expect { 
    get :your_controller_action, {} 
    }.to have_enqueued_job(AdminNotificationJob) 
end 

這使用於rspec-rails

+1

同時:) +1 –

+1

我認爲這就是所謂的'孿生'? ;) – Anthony