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

Метод fake

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

Синтаксис

<?php Event::fake(); ?>

Пример

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

<?php namespace Tests\Feature; use Tests\TestCase; use App\Events\UserRegistered; use App\Models\User; use Illuminate\Support\Facades\Event; class UserRegistrationTest extends TestCase { public function test_user_registration_dispatches_event() { Event::fake(); $user = User::create([ 'name' => 'John Doe', 'email' => 'john@example.com', ]); event(new UserRegistered($user)); Event::assertDispatched(UserRegistered::class); } } ?>

Пример

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

<?php namespace Tests\Feature; use Tests\TestCase; use App\Events\OrderShipped; use App\Models\Order; use Illuminate\Support\Facades\Event; class OrderTest extends TestCase { public function test_order_shipping_dispatches_event_once() { Event::fake(); $order = Order::factory()->create(); $order->ship(); Event::assertDispatched(OrderShipped::class, 1); } } ?>

Пример

Давайте выполним подмену событий только для определённых классов, чтобы остальные события работали в штатном режиме:

<?php namespace Tests\Feature; use Tests\TestCase; use App\Events\EmailSent; use App\Events\EmailFailed; use Illuminate\Support\Facades\Event; class EmailTest extends TestCase { public function test_specific_events_are_faked() { Event::fake([ EmailSent::class, EmailFailed::class, ]); // Здесь только EmailSent и EmailFailed будут фейковыми, // остальные события будут работать нормально } } ?>

Пример

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

<?php namespace Tests\Feature; use Tests\TestCase; use App\Events\PaymentProcessed; use App\Models\Payment; use Illuminate\Support\Facades\Event; class PaymentTest extends TestCase { public function test_payment_event_has_correct_data() { Event::fake(); $payment = Payment::factory()->create([ 'amount' => 100, ]); event(new PaymentProcessed($payment)); Event::assertDispatched(function (PaymentProcessed $event) { return $event->payment->amount === 100; }); } } ?>

Пример

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

<?php namespace Tests\Unit; use Tests\TestCase; use App\Events\UserDeleted; use App\Models\User; use Illuminate\Support\Facades\Event; class UserTest extends TestCase { public function test_user_deletion_does_not_dispatch_event() { Event::fake(); $user = User::factory()->create(); // Событие не диспатчится Event::assertNotDispatched(UserDeleted::class); } } ?>

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

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