【问题标题】:How to write test case for checking mail body in Laravel如何在 Laravel 中编写用于检查邮件正文的测试用例
【发布时间】:2020-03-03 07:19:31
【问题描述】:

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

【问题讨论】:

    标签: laravel testing tdd


    【解决方案1】:

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

    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,我认为它未在电子邮件中设置.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多