Subdomain testing in Laravel

Learning about automated testing and implementing is great. Unfortunately some projects I work on are multi tenant, and each client has it’s own subdomain. I then have an “app” subdomain with separate routes on it for things like API, or switching tenants if you belong to multiple of them. You may find a few articles that say to just use $this->call() instead of $this->get() or $this->post(). It really is that simple.

I use a domain like lvh.me which points to 127.0.0.1 along with it’s subdomains.

Here is my setup:

App: app.lvh.me
Tenant App Example 1: test1.lvh.me
Tenant App Example 2: my-company.lvh.me

Example routes.php file

//app domain routes
$router->group(['domain' => 'app.lvh.me'], function($router) {
    $router->post('register', 'App\RegisterController@store');
});

//tenant routes
$router->group(['domain' => '{account}.lvh.me'], function($router) {
    $router->post('login', 'Tenant\LoginController@store');
});

To test the login route for the Tenant App Example 1 we do:

$this->call('POST', 'http://test1.lvh.me', ['email' => 'test@example.com', 'password' => 'mysecretpassword']);

To login to Tenant App Example 2, we would do:

$this->call('POST', 'http://my-company.lvh.me', ['email' => 'test@mycompany.com', 'password' => 'mycompanypassword']);

For routes on our App domain we do:

$this->call('GET', 'http://app.lvh.me/register');