php - Laravel 在 PHPUnit 测试期间断言多个电子邮件收件人

标签 php laravel email phpunit

我想测试在 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 用户模型,或者你的用户模型同时具有 nameemail 属性,你可以将你的用户作为一个集合传入

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/

相关文章:

php - MySQL 触发器还是 PHP 进行数据审计?

JQuery 变量中的 PHP?

php - 使用 PHP 和 cURL 操作从另一个站点检索的图像数据是否违反同源策略?

c# - 发送简单的电子邮件 ASP.NET MVC, IIS7

ruby-on-rails - 如何自定义 Mailboxer 电子邮件主题?

php - 使用电子邮件保护密码重置网址?

PHP 手册 .chm 索引功能未按预期工作

php - 无法从laravel中的两个表中获取数据

PHP/Laravel - 从文件中查找并读取 'key-value pair'

laravel - 使用 Laravel 进行 Flutter FCM