Laravel Tutorials

Test Deferred Operations Easily with Laravel's withoutDefer Helper

Published
Test Deferred Operations Easily with Laravel's withoutDefer Helper image

Laravel introduces new test helpers to control deferred operation execution, allowing developers to test deferred functions without waiting for the request lifecycle to complete.

Control deferred execution in your tests:

// triggered deferred operations won't execute immediately
Product::create(['name' => 'Widget']);
$this->assertAgainstSomeDeferredOutcome(); // ❌ Fails
 
// triggered deferred operations execute immediately
$this->withoutDefer();
Product::create(['name' => 'Widget']);
$this->assertAgainstSomeDeferredOutcome(); // ✅ Passes

Here's how you might use it in your test suite:

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();
}
}

These helpers make it straightforward to test code that relies on deferred execution without waiting for the end of the request lifecycle.

Harris Raftopoulos photo

Senior Software Engineer • Staff & Educator @ Laravel News • Co-organizer @ Laravel Greece Meetup

Sponsored

masteringlaravel logo
Laravel Code Review

Get expert guidance in a few days with a Laravel code review

Visit Laravel Code Review

The latest

View all →
Volker Dusch on the PHP RCE Vulnerabilities and Disclosure image

Volker Dusch on the PHP RCE Vulnerabilities and Disclosure

Read article
Decide with Jev: Turn AI Answers into Decisions with PHP Rules image

Decide with Jev: Turn AI Answers into Decisions with PHP Rules

Read article
Skuul: Open-Source School Management Built on Laravel image

Skuul: Open-Source School Management Built on Laravel

Read article
Laravel Read Replicas: Prevent Stale Reads After a Write image

Laravel Read Replicas: Prevent Stale Reads After a Write

Read article
Screenshot: Capture Images and PDFs with PHP and Laravel image

Screenshot: Capture Images and PDFs with PHP and Laravel

Read article
Reset Sticky Database Connections Between Laravel Queue Jobs image

Reset Sticky Database Connections Between Laravel Queue Jobs

Read article