我是这样做的,关键是perform_enqueued_jobs
它允许从以下位置检索电子邮件ActionMailer::Base.deliveries
:
require "rails_helper"
RSpec.describe EventsMailbox do
include ActiveJob::TestHelper
around(:each) { |example| perform_enqueued_jobs { example.run } }
it "requires a current user", focus: true do
expect(mail_processed).to have_bounced
expect(last_delivery.from).to eq(["contact@socializus.app"])
expect(last_delivery.to).to eq(["dorian@dorianmarie.fr"])
expect(last_delivery_text).to(
include("You need to be registered on Socializus")
)
end
def mail
Mail.new(
from: "dorian@dorianmarie.fr",
to: "party@events.socializus.app",
subject: "Some subject",
body: "Some body"
)
end
def mail_processed
@mail_processed ||= process(mail)
end
def last_delivery
ActionMailer::Base.deliveries.last
end
def last_delivery_text
return unless last_delivery
text_part = last_delivery.parts.detect { _1.mime_type == "text/plain" }
return unless text_part
text_part.body.to_s
end
end