How to test ActionMailer

Railsに付属のactionmailer.Railsプロジェクトではなく,単独でも使うことができる.erbテンプレートが使えたり,htmlメールが送れるため,簡単なバッチをつくるときによく利用する.最小限の利用サンプルはこちら

テストできるのは,メール送信数と送信先,送信元,件名,本文.まず,spec_helperの設定.

ActionMailer::Base.delivery_method = :test
ActionMailer::Base.perform_deliveries = true

送信数.意図した数のメールが送られているか.

it "sends an mail" do
    expect(ActionMailer::Base.deliveries.count).to eq(1)
end

送信先.意図したアドレスに配信されたか.

it "renders the receiver mail" do
    expect(ActionMailer::Base.deliveries.first.to).to eq(["test@mail.net"])
end

送信元.意図したアドレスから配信されているか.

it "renders the sender mail" do
    expect(ActionMailer::Base.deliveries.first.from).to eq(["sender@mail.net"])
end

件名.意図した件名で配信されているか.

it "set the success subject" do
    expect(ActionMailer::Base.deliveries.first.subject).to match(/[Success]/)
end

本文.意図した本文で配信されているか.

it "sends the hello body" do
    expect(ActionMailer::Base.deliveries.first.body).to match(/Hello, #{user}./)
end

今回のテストはすべてここにまとめてある.