Laravel 邮件测试

JellyBool

JellyBool

在测试 Laravel 的邮件发送的时候,可以使用 tightenco/mailthief 这个 package :https://github.com/tightenco/mailthief

这是 Laravel 社区的一位大神写的,这是他的个人站点 https://adamwathan.me/

比如说,在用户注册的时候,我们通常会发送一封激活邮件,代码类似于下面这样:

Route::post('register', function () {

    // 其他的代码逻辑


    Mail::send('emails.activate', [], function ($message) {

        $email = request('email');

        $message->to($email),

        $message->subject('激活你的账户');

        $message->from('[email protected]');

    });


    // 其他代码

});

如果传统的测试对于这种应用场景来说是很难的,比如发送 HTTP 请求第三方的 API,怎么发送邮件等。但是,这在 tightenco/mailthief 中就可以比较完美地做到:

use MailThief\Facades\MailThief;


class RegistrationTest extends TestCase

{

    /*@test*/

    public function a_new_users_are_sent_a_welcome_email()

    {

        // 防止邮件真正发送出去,记得要有这个

        MailThief::hijack();


        $this->post('register', [

            'name' => 'JellyBool',

            'email' => '[email protected]',

            'password' => 'laravist',

        ]);


        // 保证邮件会发送到 [email protected]

        $this->assertTrue(MailThief::hasMessageFor('[email protected]'));

        // 确定邮件的标题是对的

        $this->assertEquals('激活你的账户', MailThief::lastMessage()->subject);

    }

}

很简单吧,读下来感觉自然而然就明白了。

本文由 JellyBool 创作, 转载和引用遵循 署名-非商业性使用 2.5 中国大陆 进行许可。

共有 0 条评论