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

Метод fake

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

Первым параметром метод fake принимает массив классов заданий, для которых требуется подмена. Если массив не передан, подмена применяется ко всем заданиям. Вторым параметром можно передать замыкание для дополнительной настройки поведения фейковой очереди.

Синтаксис

<?php Queue::fake($jobs = [], $handler = null); ?>

Пример

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

<?php namespace Tests\Unit; use Tests\TestCase; use App\Jobs\SendWelcomeEmail; use App\Models\User; use Illuminate\Support\Facades\Queue; class UserRegistrationTest extends TestCase { public function test_welcome_email_is_queued() { Queue::fake(); $user = User::create([ 'name' => 'John Doe', 'email' => 'john@example.com', 'password' => bcrypt('password') ]); SendWelcomeEmail::dispatch($user); Queue::assertPushed(SendWelcomeEmail::class); } } ?>

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

"Test passed: Assertion successful"

Пример

Рассмотрим подмену очереди только для конкретного задания:

<?php namespace Tests\Feature; use Tests\TestCase; use App\Jobs\ProcessOrder; use App\Jobs\SendOrderConfirmation; use App\Models\Order; use Illuminate\Support\Facades\Queue; class OrderProcessingTest extends TestCase { public function test_order_confirmation_is_sent() { Queue::fake([ProcessOrder::class]); $order = Order::create([ 'user_id' => 1, 'total' => 100, 'status' => 'pending' ]); SendOrderConfirmation::dispatch($order); ProcessOrder::dispatch($order); Queue::assertPushed(ProcessOrder::class); Queue::assertNotPushed(SendOrderConfirmation::class); } } ?>

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

"Test passed: ProcessOrder pushed, SendOrderConfirmation not pushed"

Пример

Использование метода fake с обработчиком для управления заданиями:

<?php namespace Tests\Unit; use Tests\TestCase; use App\Jobs\SendNotification; use App\Models\User; use Illuminate\Support\Facades\Queue; class NotificationTest extends TestCase { public function test_notification_job_handling() { Queue::fake([], function ($job) { if ($job instanceof SendNotification) { $job->handle(); } return $job; }); $user = User::find(1); SendNotification::dispatch($user, 'Test message'); Queue::assertPushed(SendNotification::class); } } ?>

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

"Test passed: Notification job executed"

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

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