Доставка позже не работает в тестовой среде в Rails 5

По сути, с тестовой конфигурацией, настроенной именно так, как она работала в Rails 4 (метод доставки установлен как test и т.д.), помимо устаревших опций, которые я заменил, почта отправляется только с delivery_now, а не с delivery_later. Deliver_later работает в среде разработки, даже если конфигурация этих двух сред идентична.

Конфигурация почтовой программы тестовой среды:

config.action_mailer.delivery_method = :test
config.action_mailer.perform_deliveries = true
config.action_mailer.perform_caching = false
config.action_mailer.raise_delivery_errors = true
config.action_mailer.default_url_options = { :host => 'localhost:3000' }

person James Balazs    schedule 24.09.2016    source источник
comment
вы пробовали установить active_job.queue_adapter?   -  person Aleksey    schedule 24.09.2016
comment
из test.rb комментарий: Метод доставки: test накапливает отправленные электронные письма в массиве ActionMailer :: Base.deliveries. так почему вы хотите, чтобы они были отправлены?   -  person Aleksey    schedule 24.09.2016


Ответы (2)


У меня такая же проблема, и я вместо этого прибег к использованию утверждений на

enqueued_jobs.size

чтобы подтвердить, что моя почта поставлена ​​в очередь. Кроме того, у меня есть модульные тесты для класса почтовой программы, где я использую delivery_now.

Для этого необходимо включить ActiveJob: TestHelper

class ActiveSupport::TestCase
  include ActiveJob::TestHelper
end
person Sune Nilausen    schedule 16.12.2016
comment
Огромное спасибо. Этот проект отошел на второй план, и ветка rails 5 устарела, но когда я вернусь к нему, все должно пройти. - person James Balazs; 23.12.2016

Другой вариант тестирования электронных писем, в которых используется delivery_later (Active Job), - это поместить код, который вы хотите выполнить сейчас (не в очередь), и ваши утверждения в блоке perform_enqueued_jobs. Это также требует добавления включения в верхней части вашего тестового файла чуть ниже определения класса.

include ActiveJob::TestHelper

Тогда что-то вроде того, что показано ниже.

perform_enqueued_jobs do
  post article_url, params: { article: { title: "Learn Testing", body: "Lorem Ipsum" } }
  assert_not_equal 0, ActionMailer::Base.deliveries.size
end
person Steve Carey    schedule 03.10.2017
comment
Разве это не попытка отправить почту? - person thisismydesign; 10.12.2019