Laravel 5.4 使用 Mail fake 和 Mail::queue,Mail::assertSent 不起作用

标签 laravel unit-testing email laravel-5

我正在为使用 Mail::queue 函数发送电子邮件的代码编写单元测试,如文档中的代码:https://laravel.com/docs/5.4/mocking#mail-fake

我的测试:

/** @test */
public function send_reminder()
{
     Mail::fake();

     $response = $this->actingAs($this->existing_account)->json('POST', '/timeline-send-reminder', []);
     $response->assertStatus(302);

     Mail::assertSent(ClientEmail::class, function ($mail) use ($approver) {
          return $mail->approver->id === $approver->id;
     });
}

正在测试的代码:

Mail::to($email, $name)->queue(new ClientEmail(Auth::user()));

错误消息:

The expected [App\Mail\ClientEmail] mailable was not sent.
Failed asserting that false is true.

电子邮件是在我手动测试时发送的,但不是从单元测试中发送的。我想这可能是因为我使用的是 Mail::queue 而不是 Mail::send 函数。

.env文件中,我有

QUEUE_DRIVER=sync and MAIL_DRIVER=log

如何测试 Laravel 的 Mail::queue

最佳答案

找到解决方案:

问题是该类未在 PHPUnit 测试文件的顶部导入。

导入邮件类解决了这个问题。奇怪的是它没有错误地测试用例本身。

关于Laravel 5.4 使用 Mail fake 和 Mail::queue,Mail::assertSent 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45009302/

相关文章:

php - 如何使用模型处理 Laravel 中的数据库分区

php - 如何将 vue Prop 数据附加到图像源的基本路径

javascript - 与 CruiseControl、nUnit、nAnt 和 ASP.net MVC 集成的 Javascript 自动化单元测试

email - Google 脚本 - 发送电子邮件警报

php - Laravel 连接停止工作

php - 使用 Eloquent 保护数据透视表免受质量分配

Django 电子邮件未发送

php - 如何使用 PHP 设置自动提醒邮件?

unit-testing - 如何在 Node.js 中对请求响应周期进行单元测试?

unit-testing - 一个人写项目的时候会做测试吗?