我正在运行Laravel 5.4并使用Mail::fake()和Mail::assertSent()测试Mailables。有一些Assert用于hasTo($email)和hasCc($email),但似乎没有访问邮件内容的方法。我想测试电子邮件正文是否包含特定字符串。
伪代码:
Mail::assertSent(UserInvited::class, function($mail) use($token) {
return $mail->bodyContains($token); # that method does not really exist
});
这可能吗?
6条答案
按热度按时间t9aqgxwy1#
遇到同样的情况,但搜索没有任何运气-调试后:
x759pob22#
有一个软件包可以用来测试邮件。但是到目前为止,你必须有点创造性才能让它工作,因为他们还没有在reqs中指定Laravel 5.4.。所以,进入你的
composer.json
文件,从这个repo构建你自己的软件包,其中包含更新后的Laravel 5.4. 要求,如下所示:然后,在
require-dev
下添加您的自定义包:一旦你安装好了
MAIL_DRIVER=log
,在你的.env
文件中设置MAIL_DRIVER=log
,然后把Spinen\MailAssertions\MailTracking
trait拉到你的测试中,这个trait有seeEmailContains
,seeEmailSubjectContains
等方法来Assert文本存在于任何发送的电子邮件中。vxf3dgd43#
下面是我的做法(沿着一些关于如何做其他事情的有用提示):
2mbi3lxu4#
GitHub上有一个问题要求这样做:https://github.com/laravel/ideas/issues/405
泰勒似乎没有发表评论就结束了这一请求。
如果你想检查一个字符串是否在呈现的邮件中,你可以不模仿邮件外观,只需要这样做:
ogq8wdun5#
在创建一个伪邮件管理器之前保留原始邮件管理器的技巧可以达到这个目的。一旦你准备好运行
Mailable
的Assert,恢复原始的MM。示例:
czfnxgou6#
这样我们甚至可以在5.4中渲染身体:
从https://github.com/laravel/ideas/issues/405#issuecomment-412427637开始