使用 Laravel 5.4 (dusk) 模拟邮件
Mocking mail with Laravel 5.4 (dusk)
我正在尝试在 Laravel 5.4 中的浏览器测试中测试邮件。
我在 InvitationTest
class 的 browse
回调函数中有这段代码:
\Mail::fake();
$browser->visit('projects')
->press('etc.')
\Mail::assertSent(InvitationMail::class, function ($mail) use ($project) {
return $mail->invitation->project->id == $project->id;
});
我可以在日志中看到邮件已发送:
[2017-04-06 15:36:10] local.INFO: Invitation xxxx-yyyy-zzz-aa-bb started
[2017-04-06 15:36:10] local.DEBUG: Message-ID: <xxx@yyy.dev>
Date: Thu, 06 Apr 2017 15:36:10 +0200
Subject: hello world :)
但是运行php artisan dusk
我得到了:
1) Tests\Browser\InvitationTest::testCreateInvitation
The expected [App\Mail\InvitationMail] mailable was not sent.
Failed asserting that false is true.
邮件已排队,但在我的 .env.dusk.local
中,我已将队列设置为同步(并将邮件设置为日志):
QUEUE_DRIVER=sync
MAIL_DRIVER=log
所以一切都一定很好。难道我做错了什么?为什么 dusk 说邮件未发送?
重要说明:邮件不是直接通过 Controller 发送的,而是创建了一个延迟作业,并由该作业发送邮件。延迟的作业是过去发送的,所以可能不会有影响。明确一点:控制器调度一个作业,然后这个作业发送多封邮件。
不幸的是,模拟不适用于 Laravel Dusk。虽然,关于这个问题有两个问题是开放的:
Dusk 在单独的进程中运行,因此在进行 Dusk 测试时无法使用 Mail::fake()。实际上,就像您直接使用您的应用程序一样,只需使用测试变量。
顺便说一下,这里有一种方法可以在进行 Dusk 测试时测试电子邮件 - https://medium.com/@naneri/how-to-test-laravel-dusk-emails-826e77c4d53d
我正在尝试在 Laravel 5.4 中的浏览器测试中测试邮件。
我在 InvitationTest
class 的 browse
回调函数中有这段代码:
\Mail::fake();
$browser->visit('projects')
->press('etc.')
\Mail::assertSent(InvitationMail::class, function ($mail) use ($project) {
return $mail->invitation->project->id == $project->id;
});
我可以在日志中看到邮件已发送:
[2017-04-06 15:36:10] local.INFO: Invitation xxxx-yyyy-zzz-aa-bb started
[2017-04-06 15:36:10] local.DEBUG: Message-ID: <xxx@yyy.dev>
Date: Thu, 06 Apr 2017 15:36:10 +0200
Subject: hello world :)
但是运行php artisan dusk
我得到了:
1) Tests\Browser\InvitationTest::testCreateInvitation
The expected [App\Mail\InvitationMail] mailable was not sent.
Failed asserting that false is true.
邮件已排队,但在我的 .env.dusk.local
中,我已将队列设置为同步(并将邮件设置为日志):
QUEUE_DRIVER=sync
MAIL_DRIVER=log
所以一切都一定很好。难道我做错了什么?为什么 dusk 说邮件未发送?
重要说明:邮件不是直接通过 Controller 发送的,而是创建了一个延迟作业,并由该作业发送邮件。延迟的作业是过去发送的,所以可能不会有影响。明确一点:控制器调度一个作业,然后这个作业发送多封邮件。
不幸的是,模拟不适用于 Laravel Dusk。虽然,关于这个问题有两个问题是开放的:
Dusk 在单独的进程中运行,因此在进行 Dusk 测试时无法使用 Mail::fake()。实际上,就像您直接使用您的应用程序一样,只需使用测试变量。
顺便说一下,这里有一种方法可以在进行 Dusk 测试时测试电子邮件 - https://medium.com/@naneri/how-to-test-laravel-dusk-emails-826e77c4d53d