ActionMailerの添付ファイルをRspecでテストする

ActionMailerで添付ファイルを送るようにしたのですが、そのテストをするときの情報があまりなかったのでまとめました。

以下のようにテストしました。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
RSpec.describe AppMailer, type: :mailer do

before(:all) do
Archive::Zip.archive(
"tmp/app.zip",
"README.md")
end

after(:all) do
FileUtils.rm "tmp/app.zip"
end

let(:mail) do
AppMailer.send_email(zip_path)
end

it 'assings the attachment file' do
attachment = mail.attachments[0]
expect(attachment).to be_a_kind_of(Mail::Part)
expect(attachment.content_type).to be_start_with('application/zip')
expect(attachment.filename).to eq "app.zip"
end
end

まず、before(:all)でテストに使うzipファイルを作成します。
zipファイルはarchive-zipを使って作成しています。
アーカイブするファイルは何でもよいですが、この記事ではREADME.mdとしています。
テストで作成したzipファイルはafter(:all)で消しています。
mail.attachments[0]に添付ファイルが入っているので、その種類やファイル名を確認しています。

参考リンク