2016-11-14 3 views
1

Есть ли способ установить адаптер очереди ActiveJob для inline для определенных фоновых заданий?ActiveJob встроенный адаптер очереди для конкретных заданий

В моем случае я хотел бы запустить некоторые фоновые задания в тестах для построения интеграционных тестов. Я не беспокоюсь о внутренних деталях работы, так как моя цель - просто запустить фоновые задания и утвердить результат. Однако эти тесты интеграции не охватывают все фоновые задания, поэтому я не хочу устанавливать глобальный адаптер очереди.

ответ

1

Свойство класса queue_adapter класса ActiveJob :: Base может быть задано для любого класса заданий и будет влиять на класс задания и любые дочерние классы. Таким образом, вы могли бы иметь что-то вроде

class JobThatMustRunInlineWhileTesting < ActiveJob::Base 
    if Rails.env.test? 
    queue_adapter :inline 
    end 

    # rest of your job 
end 
2

Вы можете использовать RSpec в функцию around_hook:

module WithQueueAdapter 
    def with_queue_adapter(new_adapter) 
    around do |example| 
     begin 
     old_adapter = ActiveJob::Base.queue_adapter 
     ActiveJob::Base.queue_adapter = new_adapter 
     example.run 
     ensure 
     ActiveJob::Base.queue_adapter = old_adapter 
     end 
    end 
    end 
end 


RSpec.configure do |config| 
    config.extend WithQueueAdapter 
end 

А в тесте

describe "My cool feature" do 
    with_queue_adapter :inline 

    # examples go there 
end