РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1256 of 1392 menu

Метод assertDispatched

Метод assertDispatched применяется к экземпляру фасада Event для проверки диспетчеризации событий в тестах. Первым параметром передаётся класс события, вторым необязательным параметром может быть замыкание, которое определяет дополнительные условия проверки. Метод возвращает объект, содержащий информацию о диспетчеризованном событии.

Синтаксис

<?php Event::assertDispatched($eventClass, $callback = null); ?>

Пример

Давайте проверим, что событие 'UserRegistered' было диспетчеризовано после регистрации пользователя:

<?php namespace Tests\Feature; use Tests\TestCase; use Illuminate\Foundation\Testing\WithFaker; use Illuminate\Support\Facades\Event; use App\Events\UserRegistered; use App\Models\User; class RegistrationTest extends TestCase { public function test_registration_dispatches_user_registered_event() { Event::fake(); $userData = [ 'name' => 'John Doe', 'email' => 'john@example.com', 'password' => 'password123' ]; $response = $this->post('/register', $userData); Event::assertDispatched(UserRegistered::class); } } ?>

Результат выполнения кода:

"Test passed"

В этом примере мы предварительно фейкуем события с помощью Event::fake, выполняем запрос на регистрацию, а затем проверяем, что событие было диспетчеризовано.

Пример

Давайте проверим, что событие 'OrderCreated' было диспетчеризовано с определёнными данными:

<?php namespace Tests\Feature; use Tests\TestCase; use Illuminate\Support\Facades\Event; use App\Events\OrderCreated; use App\Models\Order; use App\Models\User; class OrderTest extends TestCase { public function test_order_created_event_has_correct_data() { Event::fake(); $user = User::factory()->create(); $orderData = [ 'user_id' => $user->id, 'total' => 100.50, 'status' => 'pending' ]; $response = $this->actingAs($user) ->post('/orders', $orderData); Event::assertDispatched(OrderCreated::class, function ($event) use ($orderData) { return $event->order->total === $orderData['total'] && $event->order->status === $orderData['status']; }); } } ?>

Результат выполнения кода:

"Test passed"

Здесь мы используем замыкание во втором параметре для проверки конкретных свойств диспетчеризованного события.

Пример

Давайте проверим количество диспетчеризованных событий с помощью дополнительных методов:

<?php namespace Tests\Feature; use Tests\TestCase; use Illuminate\Support\Facades\Event; use App\Events\UserUpdated; use App\Models\User; class UserTest extends TestCase { public function test_user_update_dispatches_event_once() { Event::fake(); $user = User::factory()->create(); $response = $this->actingAs($user) ->put('/users/' . $user->id, [ 'name' => 'Updated Name' ]); Event::assertDispatched(UserUpdated::class, 1); } } ?>

Результат выполнения кода:

"Test passed"

В этом примере мы проверяем, что событие было диспетчеризовано ровно один раз.

Смотрите также

  • класс Event,
    который используется для работы с событиями в тестах
  • метод fake,
    который позволяет фейковать события в тестах
  • метод assertPushed,
    который проверяет отправку задач в очередь
  • метод assertSent,
    который проверяет отправку писем
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить