[英]Mailer tests with delayed_job not working after upgrade to rails 6
我正在使用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 I binding.pry
在测试和检查Rails.application.config.queue_adapter.queue
值为#<ActiveJob::QueueAdapters::InlineAdapter:0x00007faefad1d408>
这似乎是正确的,所以这个问题可能不是由此引起的轨道6问题。
如果我使用
UserMailer.some_message.deliver
测试通过,因此邮件程序没有任何问题。
我该如何解决?
作为解决方法,Rspec 配置块中的以下内容有效
config.before do
Delayed::Worker.delay_jobs = false
end
但是,我仍然希望回答这个问题。
我遇到了类似的问题,发现 Rails 6 似乎在调用 ActiveJob::TestHelper::TestQueueAdapter ( https://api.rubyonrails.org/files/activejob/lib/active_job/test_helper_rb.html ) 作为默认队列适配器测试。 因此,当您在测试用例中发送带有 .deliver_later 的电子邮件时,您可以使用assert_enqueued_jobs检查邮件是否已排队,然后您实际上可以使用perform_enqueued_jobs执行 UserMailer 作业,然后您将能够从ActionMailer访问实际邮件: :Base.deliveries 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.