Laravel утверждает несколько получателей электронной почты во время теста PHPUnit - PullRequest
1 голос
/ 01 апреля 2019

Я хочу проверить, что электронное письмо было отправлено на несколько адресов во время теста PHPUnit. Как мне этого добиться?

1 Ответ

2 голосов
/ 01 апреля 2019

Хотя документация Laravel действительно указывает, что в объекте Mail существует функция hasTo():

// 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);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...