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

Класс Event

Класс Event в Laravel используется для тестирования событий. Он позволяет подменить реальную систему событий на фейковую, чтобы проверить, что определённые события были отправлены. Метод fake отключает реальную отправку событий, а методы assertDispatched и assertNotDispatched позволяют проверить, были ли отправлены определённые события.

Синтаксис

<?php Event::fake(); Event::assertDispatched(EventClass::class); ?>

Пример

Давайте протестируем отправку события при регистрации пользователя:

<?php namespace App\Http\Controllers\Auth; use App\Http\Controllers\Controller; use App\Models\User; use App\Events\UserRegistered; use Illuminate\Http\Request; class RegisterController extends Controller { public function register(Request $request) { $user = User::create([ 'name' => $request->name, 'email' => $request->email, 'password' => bcrypt($request->password) ]); event(new UserRegistered($user)); return response()->json(['message' => 'User registered']); } } ?>

Тест для проверки отправки события:

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

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

"Test passed: UserRegistered event was dispatched"

Пример

Проверим, что событие не было отправлено с помощью метода assertNotDispatched:

<?php namespace Tests\Feature\Auth; use Tests\TestCase; use App\Events\UserRegistered; use App\Events\UserLoggedIn; use Illuminate\Support\Facades\Event; use Illuminate\Foundation\Testing\RefreshDatabase; class RegisterTest extends TestCase { use RefreshDatabase; public function test_user_logged_in_event_is_not_dispatched() { Event::fake(); $response = $this->post('/register', [ 'name' => 'John Doe', 'email' => 'john@example.com', 'password' => 'password123' ]); Event::assertNotDispatched(UserLoggedIn::class); $response->assertStatus(200); } } ?>

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

"Test passed: UserLoggedIn event was not dispatched"

Пример

Проверим, что событие было отправлено с определёнными данными с помощью замыкания:

<?php namespace Tests\Feature\Auth; use Tests\TestCase; use App\Events\UserRegistered; use Illuminate\Support\Facades\Event; use Illuminate\Foundation\Testing\RefreshDatabase; class RegisterTest extends TestCase { use RefreshDatabase; public function test_user_registered_event_has_correct_user_data() { Event::fake(); $response = $this->post('/register', [ 'name' => 'John Doe', 'email' => 'john@example.com', 'password' => 'password123' ]); Event::assertDispatched(function (UserRegistered $event) { return $event->user->email === 'john@example.com'; }); $response->assertStatus(200); } } ?>

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

"Test passed: UserRegistered event has correct user data"

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

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