我想测试在 PHPUnit 测试期间一封电子邮件是否已发送到多个地址。我怎样才能做到这一点?
最佳答案
尽管 Laravel documentation确实表明 hasTo()
函数存在于 Mail
对象中:
// Assert a message was sent to the given users...
Mail::assertSent(OrderShipped::class, function ($mail) use ($user) {
return $mail->hasTo($user->email) &&
$mail->hasCc('...') &&
$mail->hasBcc('...');
});
没有明确说明是否可以断言邮件已发送到多个地址。 hasTo
函数接受以下结构作为预期断言:
[
[
'email' => 'johnny@appleseed.com',
'name' => 'Johnny Appleseed'
],
[
'email' => 'jane@appleseed.com',
'name' => 'Jane Appleseed'
],
]
由于名称键是可选的,因此测试特定用户是否收到电子邮件的最简单方法如下所示:
Mail::fake();
$admins = User::where('administrator', true)->get()->map(function ($admin) {
return ['email' => $admin->email];
})->toArray();
Mail::assertSent(MyMailable::class, function ($mail) use ($admins) {
return $mail->hasTo($admins);
});
如果你使用了默认的 Laravel 用户模型,或者你的用户模型同时具有 name
和 email
属性,你可以将你的用户作为一个集合传入
Mail::fake();
$admins = User::where('administrator', true)->get();
Mail::assertSent(MyMailable::class, function ($mail) use ($admins) {
return $mail->hasTo($admins);
});
关于php - Laravel 在 PHPUnit 测试期间断言多个电子邮件收件人,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55452935/