2016-11-30 10 views
5

rspecでコントローラテストを書いていますが、アクションが完了した後、私の仕事は管理者に電子メールを送信するはずです。しかし、私は自分のテストでこの仕事を無効にしたり、何とかそれを嘲笑したりしたいと思います。これどうやってするの?テスト用のruby on ruby​​ジョブを無効にする

私は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

関連する問題