Метод assertSentTo
Метод assertSentTo применяется к фасаду Notification
в тестах Laravel и позволяет проверить, что уведомление было отправлено
определённому получателю. Первым параметром передаётся получатель
(модель или коллекция моделей), вторым - класс уведомления.
Третий параметр - необязательная функция обратного вызова
для дополнительной проверки данных уведомления.
Если уведомление не было отправлено, тест проваливается.
Синтаксис
<?php
Notification::assertSentTo($recipient, $notificationClass, $callback);
?>
Пример
Давайте проверим, что уведомление 'InvoicePaid'
было отправлено пользователю с id равным 1:
<?php
namespace Tests\Unit;
use Tests\TestCase;
use App\Models\User;
use App\Notifications\InvoicePaid;
use Illuminate\Support\Facades\Notification;
class NotificationTest extends TestCase
{
public function test_invoice_paid_notification_sent()
{
Notification::fake();
$user = User::find(1);
$user->notify(new InvoicePaid());
Notification::assertSentTo(
$user,
InvoicePaid::class
);
}
}
?>
Результат выполнения кода:
"Test passed"
Пример
Давайте проверим, что уведомление отправлено нескольким пользователям с использованием коллекции в качестве первого параметра:
<?php
namespace Tests\Unit;
use Tests\TestCase;
use App\Models\User;
use App\Notifications\InvoicePaid;
use Illuminate\Support\Facades\Notification;
class NotificationTest extends TestCase
{
public function test_notification_sent_to_multiple_users()
{
Notification::fake();
$users = User::where('active', 1)->get();
Notification::send($users, new InvoicePaid());
Notification::assertSentTo(
$users,
InvoicePaid::class
);
}
}
?>
Результат выполнения кода:
"Test passed"
Пример
Давайте используем третий параметр для проверки данных уведомления с помощью функции обратного вызова:
<?php
namespace Tests\Unit;
use Tests\TestCase;
use App\Models\User;
use App\Notifications\InvoicePaid;
use Illuminate\Support\Facades\Notification;
class NotificationTest extends TestCase
{
public function test_notification_with_custom_callback()
{
Notification::fake();
$user = User::find(1);
$user->notify(new InvoicePaid(['amount' => 100]));
Notification::assertSentTo(
$user,
InvoicePaid::class,
function ($notification, $channels) {
return $notification->amount === 100;
}
);
}
}
?>
Результат выполнения кода:
"Test passed"
Смотрите также
-
класс
Notification,
который предоставляет методы для тестирования уведомлений -
метод
fake,
который создаёт поддельную реализацию фасада Notification -
метод
assertDispatched,
который проверяет отправку событий в тестах -
метод
assertPushed,
который проверяет добавление задач в очередь