2016-11-10 3 views
3

У меня есть много заданий, которые вызывают другие вложенные задания, используя perform_later. Тем не менее, во время некоторых тестов на Cucumber, я хотел бы выполнить эти задания сразу после того, как продолжить тесты.Cucumber - выполнить задания ActiveJob `perform_later` сразу

Я думал, что это будет достаточно, чтобы добавить

# features/support/active_job.rb 
World(ActiveJob::TestHelper) 

И назвать работу с помощью этого в файле определения шага

perform_enqueued_jobs do 
    # call step that calls MyJob.perform_later(*args) 
end 

Однако я бегу в что-то вроде этого

undefined method `perform_enqueued_jobs' for #<ActiveJob::QueueAdapters::AsyncAdapter:0x007f98fd03b900> (NoMethodError) 

Что мне не хватает/не так?

+0

Вы нашли ответ на этот вопрос ? Сейчас я сталкиваюсь с той же проблемой. – Rystraum

+0

Hey @Rystraum Я сейчас смотрю на свой рабочий код, и, по-видимому, мои тесты используют «.perform_now» на шагах, и, похоже, он работает нормально. Я не верю, что мне нужно было изменять скрытые настройки где угодно ... см. Мой ответ –

ответ

0

Казалось бы, до тех пор, как вы называете .perform_now внутри шаг огурца, даже если есть вложенные задания с .deliver_later внутри, он работает слишком

#support/active_job.rb 
World(ActiveJob::TestHelper) 

#my_job_steps.rb 
Given(/^my job starts$/) do 
    MyJob.perform_now(logger: 'stdout') 
end 

#jobs/my_job.rb 
... 
MyNestedJob.perform_later(*args) # is triggered during the step 
... 

Кроме того, в моем environment/test.rb файл я не писал что-либо касающееся ActiveJob, по умолчанию работала нормально. Я считаю, что адаптер по умолчанию для тестов :inline поэтому вызов .deliver_later_now не имеет значения

+0

Спасибо! Это идеально, если вы тестируете вакансии напрямую. Я нашел другой способ, если вы хотите продолжить тестирование на уровне интеграции (например, регистрация должна отправить электронное письмо). Я написал это в своем блоге очень быстро и опубликую его как отдельный ответ, когда я получу его. Вот ссылка: http://rystraum.com/testing-email-deliveries-using-cucumbercapybaraminitest/ – Rystraum

+0

Эй, спасибо, это будет приятное дополнение, хотя электронные письма - это особый случай. На самом деле мой собственный пример использования включал планирование, но поскольку планирование «когда-либо» не легко интегрируется в Cucumber, я решил написать шаг с тем, что на самом деле происходит в запланированном действии, и было проще запускать задания непосредственно на шаге. –

0

я переключился на: тест адаптера в тестах, и она работала для меня:

# initialisers/test.rb 

config.active_job.queue_adapter = :test 

# features/support/env.rb 

World(ActiveJob::TestHelper)