4

我正在尝试在 Laravel 5.4 的浏览器测试中测试邮件。

我在回调函数InvitationTest内的一个类中有这段代码: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:邀请 xxxx-yyyy-zzz-aa-bb 开始
[2017-04-06 15:36:10] local.DEBUG:消息 ID:<xxx@ yyy.dev>
日期:2017 年 4 月 6 日星期四 15:36:10 +0200
主题:你好世界 :)

但是运行php artisan dusk我得到了:

1) Tests\Browser\InvitationTest::testCreateInvitation
未发送预期的 [App\Mail\InvitationMail] 可邮寄。
断言 false 为 true 失败。

邮件已排队,但在我的设置中,.env.dusk.local我已将队列设置为同步(并将邮件设置为日志):

QUEUE_DRIVER=sync
MAIL_DRIVER=log

所以一切都应该没问题。难道我做错了什么?为什么黄昏说邮件没有发送?

重要提示:邮件不是直接通过Controller发送的,而是创建了一个延迟的作业,这个作业会发送邮件。延迟的作业是过去发送的,因此可能没有影响。需要明确的是:控制器调度一个作业,然后该作业发送多封邮件。

4

2 回答 2

2

不幸的是,模拟不适用于 Laravel Dusk。虽然,关于这个问题有两个问题是开放的:

于 2017-04-06T14:37:07.893 回答
0

Dusk 在单独的进程中运行,因此在进行 Dusk 测试时无法使用 Mail::fake()。实际上,就像您直接使用您的应用程序一样,只需使用测试变量。

这是一种在进行 Dusk 测试时可以测试电子邮件的方法 - https://medium.com/@naneri/how-to-test-laravel-dusk-emails-826e77c4d53d

于 2018-12-26T09:52:40.603 回答