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();
}
}
Ці допоміжні функції полегшують тестування коду, який залежить від відкладеного виконання, без необхідності дочекатися завершення життєвого циклу запиту