Laravel 5.4使用Mail假邮件与Mail :: queue,Mail :: assertSent无法正常工作

时间:2017-07-10 10:09:36

标签: 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

1 个答案:

答案 0 :(得分:1)

找到解决方案:

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

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