如何在Laravel中编写检查邮件正文的测试用例

如何在Laravel中编写检查邮件正文的测试用例,laravel,testing,tdd,Laravel,Testing,Tdd,我有一个控制器,可以完成某些任务,还具有向用户发送邮件的功能。所以我们想为此编写测试用例,因为我们遵循TDD方法,所以我们决定不为此使用mock。相反,我们使用了Mail::fake()。在我的控制器中,我对邮件进行排队,并使用可邮件类呈现我的视图,并将数据传递给该可邮件类。因此,我无法检查(在我的测试用例中)该邮件类的邮件正文或主题。关于如何编写用于检查邮件正文的测试用例或其他最佳实践的任何想法?Laravel具有发送正确邮件的功能。您可以通过访问subject属性来获取主题,如果您将电子邮件

我有一个控制器,可以完成某些任务,还具有向用户发送邮件的功能。所以我们想为此编写测试用例,因为我们遵循TDD方法,所以我们决定不为此使用mock。相反,我们使用了
Mail::fake()
。在我的控制器中,我对邮件进行排队,并使用可邮件类呈现我的视图,并将数据传递给该可邮件类。因此,我无法检查(在我的测试用例中)该邮件类的邮件正文或主题。关于如何编写用于检查邮件正文的测试用例或其他最佳实践的任何想法?

Laravel
具有发送正确邮件的功能。您可以通过访问subject属性来获取主题,如果您将电子邮件呈现到一个视图中并呈现该视图,您将以字符串的形式获取电子邮件,然后对其进行字符串包含调用

Mail::assertSent(OrderShipped::class, function ($mail) {
    return $mail->subject === 'your subject' && 
        Str::contains($mail->render()->render(), 'Welcome to my website');
});

Laravel
具有发送正确邮件的功能。您可以通过访问subject属性来获取主题,如果您将电子邮件呈现到一个视图中并呈现该视图,您将以字符串的形式获取电子邮件,然后对其进行字符串包含调用

Mail::assertSent(OrderShipped::class, function ($mail) {
    return $mail->subject === 'your subject' && 
        Str::contains($mail->render()->render(), 'Welcome to my website');
});

这个注释是半段伪代码,我不确定mail->render()->render()是最好的方法。如果您有任何问题,我将研究它。我认为它将是assertQueued而不是assertSent。不管怎样,那没什么大不了的。问题在于$mail参数。如果我将OrderShipped类作为其第一个参数传递,则不会通过$mail对象获得其成员的任何访问权限。因此,$mail->subject会导致null这不是它的工作方式,您正在检查类是否是OrderShipped,实际发送的邮件是否会在邮件对象上,如果它为null,我认为它没有在电子邮件中设置。此注释是半个伪代码,我不确定mail->render()->render()是否是最佳方法。如果您有任何问题,我将研究它。我认为它将是assertQueued而不是assertSent。不管怎样,那没什么大不了的。问题在于$mail参数。如果我将OrderShipped类作为其第一个参数传递,则不会通过$mail对象获得其成员的任何访问权限。因此,$mail->subject会导致null这不是它的工作方式,您正在检查类是否是OrderShipped,实际发送的邮件是否会在邮件对象上,如果它为null,我认为它没有在电子邮件中设置。