参考リポジトリ: https://github.com/Bonv-dev/book_mgmt/commit/59912b0
メール配信コードの確認を行います。
一例:
test "change_status_email" do
new_log = logs(:new_log)
old_log = logs(:old_log)
from_user = users(:librarian)
to_users = [users(:one), users(:two)]
mail = LogMailer.change_status_email(new_log, old_log, from_user, to_users)
assert_equal "蔵書のステータス変更", mail.subject
assert_equal [from_user.email], mail.from
assert_equal to_users.map(&:email), mail.to.sort
body = mail.text_part.body.to_s
assert_includes body, "司書名:#{from_user.name}"
assert_includes body, "蔵書名:#{new_log.book.name}"
assert_includes body, "変更"
end
fixtures で必要なデータを用意し、
LogMailer.change_status_email を呼びます。
mail オブジェクトを返すので、
仕様通りに値が入っているかを確認します。
サンプルプログラムでは letter_opener_web を使っているので不要ですが、
Rails デフォルトの Preview 機能もあります。
\test\mailers\previews フォルダにテストファイルを置きます。
例えば、log_mailer_preview.rb とします。
こちらはブラウザで結果を見る関係上、
環境は development になるので、
データは fixtures ではなく、データベースにあるものを使います。
log_mailer_preview.rb に def change_status_email を追加し、
パラメータを設定して、LogMailer.change_status_email を呼ぶコードを書いたとします。
ruby bin/rails s で Railsサーバーを起動し、
ブラウザで、
http://localhost:3000/rails/mailers/log_mailer/change_status_email
を開くと、メールの内容が確認できます。
http://localhost:3000/rails/mailers/ までは固定で、
log_mailer は Preview ファイル名から "_preview.rb" を除いたもの、
change_status_email はテストメソッド名になります。
Format で、HTML と plain-text を切り替えられます。
ちなみに、
Locale で、言語も切り替えられますが、
サンプルプログラムでは ja しか用意していないので使いません。