LoginSignup
13
10

More than 5 years have passed since last update.

Laravel でモックを使ったメール送信のテストが簡単だった

Posted at

はじめに

モックを使ったメール送信のテストが意外と簡単にできたのでメモ。
アサートメソッドが充実していて、キューを使ったメール送信のテストも簡単にできてしまう。

環境

PHP 7.1
Laravel 5.5

サンプル

MailTest.php
class MailTest extends TestCase
{
    public function testMailSend()
    {
        Mail::fake();

        $email = 'test@gmail.com';

        // 任意の実際のリクエスト処理
        $this->put(
            "test/mail",
            [
                'mail_to' => $email,
            ]
        );

        // 1回送信されたことをアサート
        Mail::assertQueued(MailBuilder::class, 1);

        // メールが指定したユーザーに送信されていることをアサート
        Mail::assertQueued(
            MailBuilder::class,
            function ($mail) use ($email) {
                return $mail->to[0]['address'] === $email;
            }
        );
    }
}

解説

  • Mail::fake() で実際にメールが送信されるのを防ぐことができる
  • MailBuilderphp artisan make:mail MailBuilder で生成した任意の Mailable クラス
  • メール送信の前にキューに入れているので assertQueued を使用しているが普通に送信するなら assertSent を使う

あとがき

当たり前だが、ユーザーにメールが到達しているかどうかまではテストできないので、処理がメール送信まで到達していることまでが担保できる範囲。

13
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
10