Email::Senderでメール送信しているアプリをテストするときは以下の様な感じで行う。
use Test::More; use Encode; # 環境変数を設定 BEGIN { $ENV{EMAIL_SENDER_TRANSPORT} = 'Test' } use YourCode; YourCode->run; my @deliveries = Email::Sender::Simple->default_transport->deliveries; for my $d ( @deliveries ) { my %headers = @{ $d->{email}->[0]->{header}->{headers} }; my $body = $d->{email}->[0]->body; like(decode_utf8($body), qr/登録しました。/); } # default_transportをリセット Email::Sender::Simple->reset_default_transport();
default_transportはクラス変数なので、何回もメール送信テストをするときは、リセットするようにする。