RailsのActionMailerに関するテストですが、何をどのようにテストしたら良いのか曖昧だったので、ここでしっかりと基本をおさらいしたいと思います。

基本的なテスト項目

メールに関しては、おおまかに以下の項目をテストすれば良いのではないかと思います。

  • 送信元
  • 宛先
  • 件名
  • 本文

上記のそれぞれのテスト方法としては、以下のような記述で対処できます。

# メールアドレスは配列に格納されている
expect(mail.from).to eq ['送信元']
expect(mail.to) eq ['宛先']

expect(mail.subject).to eq '件名'
expect(mail_body).to match '本文'

本文の抽出

メール本文が複数の形式に対応している場合は、それぞれの形式を抽出するようにする必要があります。

# partsの中からHTML形式のものだけ抽出
part = mail.body.parts.detect do |p|
  p.content_type == 'text/html; charset=UTF-8'
end
mail_body = part.body.raw_source

このようにすれば、メール本文をテストをしやすい形に持っていく事ができます。

メールの送信判定

メールが送信されたかは、ActionMailer::Base.deliveriesのsizeが増加したかを判定します。

# メールが一通送信された
expect(ActionMailer::Base.deliveries.size).to eq 1

また、ActionMailer::Base.deliveriesは自動的にはリセットされないので手動でリセットする必要があるようです。

送信のテストが終わったらリセットするようにすると良さ気です。

after do
  ActionMailer::Base.deliveries.clear
end

更新日 : 2020年7月14日

投稿者: TWEI

趣味はプログラミング。 以前は仕事でプログラミングをやっていました。現在はWebエンジニアを目指して勉強中。 勉強で得た知識などをブログで発信していく予定です。

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA