1 min read

Testing Laravel Subdomain Routing with Pest

Let’s say you have subdomain routing in Laravel. Here’s how you can test the routes using Pest.

Assign each subdomain using beforeEach() hook and organize them into separate directories.

/tests/Pest.php
pest()->beforeEach(function () {
    URL::useOrigin('http://'.config('app.hosts.account'));
})->in('Feature/Domains/Account');
 
pest()->beforeEach(function () {
    URL::useOrigin('http://'.config('app.hosts.admin'));
})->in('Feature/Domains/Admin');
 
pest()->beforeEach(function () {
    URL::useOrigin('http://'.config('app.hosts.app'));
})->in('Feature/Domains/App');

Then, test it as usual.

/tests/Feature/Domains/Inquiry/IndexTest.php
it('returns a successful response for /inquiries on app.hosts.account', function () {
    /** @var \Illuminate\Testing\TestResponse $response */
    $response = $this->get('/inquiries');
 
    $response->assertOk()
        ->assertViewIs('app.inquiry');
});

If you’re curious about my .env, here it is:

ADMIN_HOST=admin.localhost
ACCOUNT_HOST=account.localhost
APP_HOST=app.localhost

And in config/app.php:

/config/app.php
//...
 
'hosts' => [
    'admin' => env('ADMIN_HOST', 'admin.localhost'),
    'account' => env('ACCOUNT_HOST', 'account.localhost'),
    'app' => env('APP_HOST', 'app.localhost'),
],