使用Laravel 5.5中的视图创建单元测试邮件时,它将无法正常工作

问题描述 投票:3回答:1

我正在用Mail::fake();开始测试。然后,一个事件触发一个监听器,该监听器发送一封电子邮件:

Mail::send('path_to_a_view', $data, function(Message $message) {
    // set "to" and subject.
});

监听器实现ShouldQueue接口。

在我的测试中,我试图检查电子邮件是否使用Mail::assertQueued(...);进行排队(我已经为这种方法尝试了多个类名,因为我不确定哪种情况适用于我的情况)。 但由于总是失败,我发现send类中的MailFake方法拒绝了用视图创建的邮件。负责这种行为的是following line

它为什么简单地回归?如何测试我的邮件是否已排队?

php laravel unit-testing
1个回答
1
投票

您需要针对您正在执行的操作实施两个单独的测试。

第一个测试将测试该事件被触发(Event::fake())。第二个测试是检查如果事件被触发,那么你的侦听器上的handle()函数会将邮件排队(Mail::fake())。

如果您只是想检查邮件,只需省略实施第一个测试。

注意:对于第二个测试,您实际上不需要调度事件,只需解析侦听器(resolve(FQNListener::class)->handle(new resolve(FQNEvent::class)))并测试您的邮件是否排队:

Mail::assertQueued(FQNMail::class)

为了使所有这一切工作,不要使用回调作为“电子邮件”,而是真正的类。 (php artisan make:mail ...


注意:如果您所做的只是发送电子邮件,也请考虑删除中间人(事件+监听器)。

© www.soinside.com 2019 - 2024. All rights reserved.