2016-11-30 2 views
5

Я пишу контрольный тест с rspec, и после того, как действие закончено, моя работа должна отправить электронную почту пользователю admin. Но я бы хотел отключить эту работу для своих тестов или каким-то образом высмеять ее. Как я могу это сделать?Отключить ruby ​​on rails job for test

Я пользуюсь 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 =: тест - это то, что я ищу, спасибо! – divideByZero

1

Ваш тест контроллер будет выглядеть следующим образом:

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

Это использует метод #have_enqueued_job найденный на rspec-rails

+1

одновременно :) +1 –

+1

Я думаю, что это называется «Твиннинг»? ;) – Anthony

Смежные вопросы