Laravel实施assertSentFrom特定地址可邮寄测试
Laravel implement assertSentFrom specific address Mailable Testing
试图掌握 Mocking 和测试用例,我想测试 Mailable TestMail
是从 company@company.com 发送的,文档提供了 hasTo
、hasCc
和 hasBcc
,但看起来不像是使用 hasFrom
之类的东西。有解决办法吗?
https://laravel.com/docs/9.x/mocking#mail-fake
public function testEmailAlwaysFrom()
{
Mail::fake();
Mail::to('foo@bar.com')->send(new TestMail);
Mail::assertSent(TestMail::class, function ($mail) {
return assertEquals('company@company.com', $mail->getFrom());
// return $mail->hasTo($user->email) &&
// $mail->hasCc('...') &&
// $mail->hasBcc('...');
});
}
MailFake 没有在 class 中提供 hasFrom
方法,因此 return false。
然而,当使用环境变量 MAIL_FROM_ADDRESS 时,下面的解决方法不起作用,必须在 build()
.
中调用 ->from()
已报告几个 GitHub 问题,建议采用以下解决方法:
https://github.com/laravel/framework/issues/20056
https://github.com/laravel/framework/issues/20059
public function testEmailAlwaysFrom()
{
Mail::fake();
Mail::to('foo@bar.com')
->send(new TestMail);
Mail::assertSent(TestMail::class, function ($mail) {
$mail->build(); // <-- workaround
return $mail->hasTo('foo@bar.com') and
$mail->hasFrom('company@company.com');
});
}
试图掌握 Mocking 和测试用例,我想测试 Mailable TestMail
是从 company@company.com 发送的,文档提供了 hasTo
、hasCc
和 hasBcc
,但看起来不像是使用 hasFrom
之类的东西。有解决办法吗?
https://laravel.com/docs/9.x/mocking#mail-fake
public function testEmailAlwaysFrom()
{
Mail::fake();
Mail::to('foo@bar.com')->send(new TestMail);
Mail::assertSent(TestMail::class, function ($mail) {
return assertEquals('company@company.com', $mail->getFrom());
// return $mail->hasTo($user->email) &&
// $mail->hasCc('...') &&
// $mail->hasBcc('...');
});
}
MailFake 没有在 class 中提供 hasFrom
方法,因此 return false。
然而,当使用环境变量 MAIL_FROM_ADDRESS 时,下面的解决方法不起作用,必须在 build()
.
->from()
已报告几个 GitHub 问题,建议采用以下解决方法:
https://github.com/laravel/framework/issues/20056 https://github.com/laravel/framework/issues/20059
public function testEmailAlwaysFrom()
{
Mail::fake();
Mail::to('foo@bar.com')
->send(new TestMail);
Mail::assertSent(TestMail::class, function ($mail) {
$mail->build(); // <-- workaround
return $mail->hasTo('foo@bar.com') and
$mail->hasFrom('company@company.com');
});
}