【问题标题】:Laravel assert multiple recipients of email during PHPUnit testLaravel 在 PHPUnit 测试期间断言多个电子邮件收件人
【发布时间】:2023-04-05 08:46:01
【问题描述】:

我想在 PHPUnit 测试期间测试一封电子邮件是否已发送到多个地址。我怎样才能做到这一点?

【问题讨论】:

    标签: php laravel email phpunit


    【解决方案1】:

    虽然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);
    });
    

    【讨论】:

    • 太棒了,很好的回复。
    猜你喜欢
    • 2011-05-26
    • 2017-10-27
    • 2016-02-08
    • 2019-04-22
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    • 2019-06-23
    • 1970-01-01
    相关资源
    最近更新 更多