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

Метод fake

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

Синтаксис

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

Метод не принимает параметров и возвращает экземпляр фейкового диспетчера.

Пример

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

<?php namespace AppHttpControllers; use AppJobsCreateUserJob; use IlluminateSupportFacadesBus; class UserController extends Controller { public function store(Request $request) { $job = new CreateUserJob($request->all()); Bus::dispatch($job); return response()->json(['message' => 'User created']); } } ?>
<?php namespace TestsUnit; use AppJobsCreateUserJob; use AppHttpControllersUserController; use IlluminateFoundationTestingTestCase; use IlluminateSupportFacadesBus; use IlluminateHttpRequest; class UserControllerTest extends TestCase { public function test_store_dispatches_create_user_job() { Bus::fake(); $controller = new UserController(); $request = new Request(['name' => 'John', 'email' => 'john@example.com']); $response = $controller->store($request); Bus::assertDispatched(CreateUserJob::class); $this->assertEquals(200, $response->status()); } } ?>

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

"Test passed: CreateUserJob was dispatched"

Пример

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

<?php namespace TestsUnit; use AppJobsCreateUserJob; use AppHttpControllersUserController; use IlluminateFoundationTestingTestCase; use IlluminateSupportFacadesBus; use IlluminateHttpRequest; class UserControllerTest extends TestCase { public function test_store_dispatches_job_with_correct_data() { Bus::fake(); $controller = new UserController(); $data = ['name' => 'Jane', 'email' => 'jane@example.com']; $request = new Request($data); $response = $controller->store($request); Bus::assertDispatched(function (CreateUserJob $job) use ($data) { return $job->userData === $data; }); $this->assertEquals(200, $response->status()); } } ?>

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

"Test passed: job data matches expected values"

Пример

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

<?php namespace TestsUnit; use AppJobsCreateUserJob; use AppHttpControllersUserController; use IlluminateFoundationTestingTestCase; use IlluminateSupportFacadesBus; use IlluminateHttpRequest; class UserControllerTest extends TestCase { public function test_store_dispatches_job_only_once() { Bus::fake(); $controller = new UserController(); $request = new Request(['name' => 'Bob', 'email' => 'bob@example.com']); $controller->store($request); Bus::assertDispatched(CreateUserJob::class, 1); $this->assertTrue(true); } } ?>

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

"Test passed: job dispatched exactly once"

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

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