Cleaner Test Header Management with Laravel's withoutHeaders

Cleaner Test Header Management with Laravel's withoutHeaders

Need to remove multiple headers in your Laravel tests? The new withoutHeaders method lets you do it in one clean shot! Let's explore this handy testing improvement.

The Old vs New Way

Previously, you had to chain multiple method calls:

// Old way
$this->withoutHeader('name')
    ->withoutHeader('foo')
    ->from('previous/url');

// New way
$this->withoutHeaders(['name', 'foo'])
    ->from('previous/url');

Real-World Example

Here's how you might use it in an API test:

class ApiAuthenticationTest extends TestCase
{
    public function test_api_rejects_requests_without_required_headers()
    {
        $response = $this->withoutHeaders([
            'X-API-Key',
            'X-Client-ID',
            'X-Request-Timestamp'
        ])->post('/api/data', [
            'title' => 'Test Data'
        ]);

        $response->assertStatus(401)
            ->assertJson([
                'message' => 'Missing required headers'
            ]);
    }
    
    public function test_internal_endpoints_ignore_tracking_headers()
    {
        $response = $this->withoutHeaders([
            'X-Track-User',
            'X-Track-Session',
            'X-Analytics-ID'
        ])->get('/internal/stats');

        $response->assertSuccessful();
    }
}

The new withoutHeaders method makes your tests cleaner and more maintainable by removing multiple headers in a single call.

If this guide was helpful to you, subscribe to my daily newsletter and give me a follow on X/Twitter. It helps a lot!

Subscribe to Harris Raftopoulos

Don’t miss out on the latest issues. Sign up now to get access to the library of members-only issues.
jamie@example.com
Subscribe