Почтовые тесты с delayed_job не работают после обновления до rails 6 - PullRequest
0 голосов
/ 11 декабря 2019

Я использую rails 6.01 и delayed_job, 4.1.8. Я установил активный адаптер очереди заданий

#config/environments/test.rb
config.active_job.queue_adapter = :inline

Код rspec:

before(:each) { ActionMailer::Base.deliveries = [] }
it 'sends some message' do
      UserMailer.delay.some_message
      mail = ActionMailer::Base.deliveries  
      expect(mail.count).to eq 1
end

Этот тест завершается неудачно со счетчиком 0. При просмотре журнала почтовое сообщение помещается в очередь в DelayedJobно не выполнено:

Delayed::Backend::ActiveRecord::Job Create (0.4ms)  INSERT INTO "delayed_jobs" ("handler", "run_at", "created_at", "updated_at") VALUES ($1, $2, $3, $4) RETURNING "id"  [["handler", "--- !ruby/object:Delayed::PerformableMailer\nobject: !ruby/class 'UserMailer'\nmethod_name: :some_message"], ["run_at", "2019-12-12 18:29:26.457639"], ["created_at", "2019-12-12 18:29:26.458062"], ["updated_at", "2019-12-12 18:29:26.458062"]]

f Я использую binding.pry в тесте и проверим Rails.application.config.queue_adapter.queue значение #<ActiveJob::QueueAdapters::InlineAdapter:0x00007faefad1d408>, которое кажется правильным, поэтому эта проблема, вероятно, не вызвана этими рельсами6 выпуск .

Если я использую

UserMailer.some_message.deliver

, тест пройден, так что с почтовой программой все в порядке.

Как это исправить?

1 Ответ

0 голосов
/ 12 декабря 2019

В качестве обходного пути сработало следующее в блоке конфигурации Rspec

  config.before do
      Delayed::Worker.delay_jobs = false
  end

Однако я все равно был бы признателен за ответ на вопрос.

...