If you're a sponsor, you can get an opinionated, but automatic testing setup on the site with exclusive content for sponsors: https://sponsors.tenancyforlaravel.com/frictionless-testing-setup

TODO: Review


Keep in mind that the package makes heavy use of events, so if you use Event::fake() anywhere in your tests, tenancy initialization and related processes might break.

For that reason, try to be selective about faking tests. Use for example:


rather than


Central app

To test your central app, just write normal Laravel tests.

Tenant app

Note: If you're using multi-database tenancy & the automatic mode, it's not possible to use :memory: SQLite databases or the RefreshDatabase trait due to the switching of default database.

To test the tenant part of the application, create a tenant in the setUp() method and initialize tenancy.

You may also want to do something like this:

class TestCase // extends ...
    protected $tenancy = false;

    public function setUp(): void

        if ($this->tenancy) {

    public function initializeTenancy()
        $tenant = Tenant::create();


    // ...

And in your individual test cases:

class FooTest extends TestCase
    protected $tenancy = true;

    /** @test    */
    public function some_test()

Or you may want to create a separate TestCase class for tenant tests, for better organization.