Laravelの送信メールのテストでメールの件名が取得できない問題の対策

下記のLaravelの送信メールをテストする一般的なコードでは、メールの件名($mail->subject)が空欄になりました。
$mail->hasTo(…)や$mail->hasCc(…)のアサートは正しく動作します。

    public function testSendMail()
    {
        Mail::fake();
        Mail::assertNothingSent();

        // メールの送信コード...

        Mail::assertSent(OrderShipped::class, function (OrderShipped $mail) {
            return $mail->subject == "注文内容の確認";
        });
    }

Mailableのbuild()メソッドが実行されてなかったので、buildメソッドを実行してみました。
そうするとメールの件名($mail->subject)に値が設定され、テストができるようになりました。

    public function testSendMail()
    {
        Mail::fake();
        Mail::assertNothingSent();

        // メールの送信コード...

        Mail::assertSent(OrderShipped::class, function (OrderShipped $mail) {
            $mail->build();
            return $mail->subject == "注文内容の確認";
        });
    }

コメントを残す

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

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください