我有一个使用rspec和Rails 4.2.8的功能规范套件。我相应地升级到Rails 5.0.6和rspec 3.7。
许多规范都有效,但我发送电子邮件的规范实际上都没有将电子邮件添加到ActionMailer::Base.deliveries
数组中。
我已经确认config/environments/test/rb
有config.action_mailer.delivery_method = :test
,应将任何已发送的电子邮件添加到阵列,而不是实际发送。
我怀疑它与ActiveJob
有关,因为当我在我的规范中通过SomeMailer.some_method().deliver_later
发送电子邮件时,它会返回一个ActionMailer::DeliveryJob
对象,但它不会添加ActionMailer::Base
数组的任何内容。
当我致电SomeMailer.some_method().deliver_now
时,我发现电子邮件实际上已添加到ActionMailer::Base
数组中。我想知道对于我的规格我是否只需要将它们配置为全部使用deliver_now
而不是deliver_later
?
我已经审核并遵循了4.2 - >中的Ruby on Rails升级指南。 5.0并且无法弄清楚这一点。
我的电子邮件规格遵循以下格式:
# spec/models/record_spec.rb
require "rails_helper"
describe Model do
describe "#method" do
it "sends email" do
record = Record.create(attributes = {})
RecordMailer.welcome_email(record).deliver_later
last_email = ActionMailer::Base.deliveries.last
expect(last_email.subject).eq ("Welcome")
end
end
end
答案 0 :(得分:0)
假设您在某处包含 ActiveJob :: TestHelper ,您可以包装 deliver_later (或者如果在功能规范中,例如按钮点击触发交付)在 perform_enqueued_jobs 块内:
perform_enqueued_jobs do
RecordMailer.welcome_email(record).deliver_later
end
现在您的 ActionMailer :: Base.deliveries 应该包含通过ActiveJob发送的电子邮件。