我正在尝试在 Laravel 5.4 的浏览器测试中测试邮件。
我在 browse
回调函数内的 InvitationTest
类中有以下代码:
\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 发送的,而是创建了一个延迟作业,并且该作业发送邮件。延迟的作业已发送过去,因此可能不会产生影响。需要明确的是: Controller 调度一个作业,然后该作业发送多封邮件。
最佳答案
不幸的是, mock 不适用于 Laravel Dusk。不过,关于这个问题有两个问题尚未解决:
关于laravel - 使用 Laravel 5.4 模拟邮件(黄昏),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43257074/