RSpecでActionMailerのテスト
RSpecのSystemSpec内でメール送信のテストを行う際のメモ。
mailers/article_mailer.rb
class ArticleMailer < ApplicationMailer def report mail(to: 'admin@example.com', subject: 'HOGE') end end
送信メールを上のように定義。
テスト環境でもArticleMailer.report.deliver
でメール送信できるので
letに入れて書くと、
mailer_spec.rb
require 'rails_helper' RSpec.describe "Mailer", type: :system do let(:mail) { ArticleMailer.report_summary.deliver } let(:check_sent_mail) { expect(mail.present?).to be_truthy, 'メールが送信されていません' expect(mail.to).to eq(['admin@example.com']), 'メールの送信先が正しくありません' expect(mail.subject).to eq('HOGE'), 'メールのタイトルが正しくありません' } describe 'メールの送信' do context 'メールを送信した場合' do it 'タイトル、メールアドレスが正しく送信される' do check_sent_mail end end end end
check_sent_mail内でlet(:mail)
も呼ばれるので、
メール送信+検証ができる。
mail.to
で送信先
mail.subject
でタイトル
mail.from
で送信元
mail.body
で本文を参照。
開発環境ではgem letter_opener_webを使用して/letter_opener内で確認してたので
SystemSpec内でもvisit '/letter_opner'
で飛ぼうとして飛べなくて
ハマってたのでメモ。