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

Класс Bus

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

Синтаксис

<?php Bus::fake(); Bus::assertDispatched($jobClass); Bus::assertNotDispatched($jobClass); Bus::assertDispatchedTimes($jobClass, $times); Bus::assertNothingDispatched(); ?>

Пример

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

<?php namespace Tests\Feature; use Tests\TestCase; use Illuminate\Support\Facades\Bus; use App\Jobs\ProcessOrder; use App\Models\Order; class OrderControllerTest extends TestCase { public function test_order_processing_dispatches_job() { Bus::fake(); $order = Order::factory()->create(); $res = $this->post('/api/orders', [ 'order_id' => $order->id, 'status' => 'pending' ]); Bus::assertDispatched(ProcessOrder::class); } } ?>

Пример

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

<?php namespace Tests\Feature; use Tests\TestCase; use Illuminate\Support\Facades\Bus; use App\Jobs\SendWelcomeEmail; use App\Models\User; class UserControllerTest extends TestCase { public function test_welcome_email_job_has_correct_data() { Bus::fake(); $user = User::factory()->create([ 'email' => 'test@example.com' ]); $res = $this->post('/api/users', [ 'name' => 'John Doe', 'email' => 'test@example.com' ]); Bus::assertDispatched(SendWelcomeEmail::class, function ($job) use ($user) { return $job->user->id === $user->id; }); } } ?>

Пример

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

<?php namespace Tests\Feature; use Tests\TestCase; use Illuminate\Support\Facades\Bus; use App\Jobs\ProcessOrder; use App\Jobs\SendNotification; use App\Jobs\UpdateInventory; class BulkProcessingTest extends TestCase { public function test_multiple_jobs_dispatched() { Bus::fake(); $res = $this->post('/api/bulk-process', [ 'order_ids' => [1, 2, 3] ]); Bus::assertDispatched(ProcessOrder::class, 3); Bus::assertNotDispatched(SendNotification::class); Bus::assertDispatchedTimes(UpdateInventory::class, 1); } } ?>

Пример

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

<?php namespace Tests\Feature; use Tests\TestCase; use Illuminate\Support\Facades\Bus; use App\Models\Article; class ArticleControllerTest extends TestCase { public function test_read_operation_does_not_dispatch_jobs() { Bus::fake(); $article = Article::factory()->create([ 'title' => 'test article', 'text' => 'content here' ]); $res = $this->get('/api/articles/' . $article->id); Bus::assertNothingDispatched(); } } ?>

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

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