Laravel - setting up a test database

laravel, phpunit

Solution

For now I have done this, in the tests/TestCase.php

class TestCase extends Illuminate\Foundation\Testing\TestCase {

    public static $setupDatabase = true;

    public function setUp()
    {
        parent::setUp();
        if(self::$setupDatabase)
        {
            $this->setupDatabase();
        }
    }

    public function setupDatabase()
    {
        Artisan::call('migrate');
        Artisan::call('db:seed');
        self::$setupDatabase = false;
    }

    ....

which seems to work, but doesn't feel ideal, but means I can easily re-setup the db if I need to reset it for a test...

Problem

With my laravel application I have a bunch of migrations and db seed data. In `app/config/testing/database.php` I have set a mysql database for testing. I've populated the test database with `migrate` and `db:seed` commands, specifying the testing environment. This works pretty well, but I want to call those commands each time I run `phpunit`. If it do it in the setUp then it takes so long as it's called on every single test. I can also call it in the `setUpBeforeClass` which is better, but still longer if I am testing 10 classes. Is there a way I can all it just once when I run `phpunit` ?

Original source