Просте тестування відкладених операцій із використанням хелпера withoutDefer у Laravel

1
Перекладено ШІ
Оригінал: Laravel News
Оновлено: 17 грудня, 2025
У Laravel з'явилися нові допоміжні функції для контролю виконання відкладених операцій, що дозволяє розробникам тестувати їх без очікування завершення життєвого циклу запиту. Чи хочете дізнатися, як ці можливості можуть спростити ваше тестування? Продовжуйте читати, щоб відкрити нові горизонти в написанні тестів у Laravel!

Laravel вводить нові тестові допоміжні функції для контролю виконання відкладених операцій, що дозволяє розробникам тестувати відкладені функції без необхідності дочекатися завершення життєвого циклу запиту.

Контролюйте відкладене виконання у своїх тестах:

// Відкладені операції не виконуються одразу
Product::create(['name' => 'Widget']);
$this->assertAgainstSomeDeferredOutcome(); // ❌ Невдача

// Відкладені операції виконуються одразу
$this->withoutDefer();
Product::create(['name' => 'Widget']);
$this->assertAgainstSomeDeferredOutcome(); // ✅ Успішно

Ось як це можна використовувати у вашому наборі тестів:

class OrderProcessingTest extends TestCase
{
    public function test_confirmation_email_is_queued_after_order()
    {
        Mail::fake();
        
        $this->withoutDefer();

        $order = Order::create([
            'customer_id' => 123,
            'total' => 99.99,
            'status' => 'pending'
        ]);

        Mail::assertQueued(OrderConfirmationEmail::class, function ($mail) use ($order) {
            return $mail->hasTo($order->customer->email);
        });
    }

    public function test_inventory_tracking_is_updated()
    {
        Event::fake();

        $this->withoutDefer();

        $product = Product::factory()->create();
        $product->adjustStock(-5);

        Event::assertDispatched(InventoryAdjusted::class, function ($event) use ($product) {
            return $event->product_id === $product->id;
        });

        $this->withDefer();
    }
}

Ці допоміжні функції полегшують тестування коду, який залежить від відкладеного виконання, без необхідності дочекатися завершення життєвого циклу запиту

Популярні

Logomark Logotype

Перетворення даних у типобезпечні DTO за допомогою пакету Data Model

Досліджуйте новий пакет Data Model для PHP, який спрощує процес гідратації об'єктів без зайвих складнощів! Дізнайтеся, як впровадження типобезпечних об'єктів може революціонізувати ваш підхід до розробки, читаючи нашу статтю

Logomark Logotype

4 поширені помилки Vite у Laravel

Використання Vite для створення фронтенд-ресурсів у вашому додатку Laravel може бути захоплюючим, але іноді ви можете стикнутися з певними помилками. У цій статті ми розглянемо чотири поширені помилки, з якими ви можете зіткнутися, а також підкажемо способи їх усунення, щоб ви могли знову зосередитися на розробці вашого додатку

Logomark Logotype

Nuxt 3 + Laravel Sanctum: Просте та надійне рішення для автентифікації вашого SPA та API

У сучасній веб-розробці аутентифікація є ключовою для захисту додатків і даних користувачів. Дізнайтеся, як модуль nuxt-sanctum-authentication спростить інтеграцію між Nuxt 3 та Laravel Sanctum, забезпечуючи надійний і зручний спосіб реалізації аутентифікації для вашого проєкту