Skip to content
Switch branches/tags

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

Fast Laravel Testing

Latest Stable Version Total Downloads Build status

Festing is a very very great name made by combining the words fast and testing. Because that is what this package is for. Faster tests in Laravel. The package is inspired by a great article from Nate Denlinger.

Before 'Festing':

Before fast database tests

After 'Festing':

After fast database tests


Installation and setup time is estimated to be around 5 minutes in existing Laravel projects and 2 minutes in new projects. Install this package via composer.

composer require --dev dees040/festing

If you're using Laravel >= 5.5 this package will automatically be added to your providers list. If using a lower version, add the service provider to the providers array in config/app.php.


You're now ready for setup.

The package comes with a small config file. The default config should be good in most use cases. However, feel free to change it. To publish the config file run the following command

php artisan vendor:publish --provider="Dees040\Festing\ServiceProvider" --tag="config"


First you should update the database.php config file. We should add a connection specifically for testing. You can use the following array.

'testing' => [
    'driver' => 'sqlite',
    'database' => database_path('testing.sqlite'),
    'prefix'   => '',

In the package config you can specify which connection to use while testing. By default it will use the testing connection, which we've just added to the connections array. You should also add or update this in <php> tag located in the phpunit.xml file.

<env name="DB_CONNECTION" value="testing"/>

Because Laravel don't have an option to boot your testing traits like the model traits we need to add a little bit of functionality in our tests/TestCase.php file. If you haven't overwritten the setUpTraits() method yet, you can add this to the TestCase.php.

use Dees040\Festing\FestTheDatabase;
use Illuminate\Foundation\Testing\TestCase as BaseTestCase;

abstract class TestCase extends BaseTestCase
    use CreatesApplication, FestTheDatabase;

     * Boot the testing helper traits.
     * @return array
    protected function setUpTraits()
        $uses = parent::setUpTraits();
        if (isset($uses[\Dees040\Festing\ShouldFest::class])) {
        return $uses;

If you already have overwritten the setUpTraits() method just add the if statement to the method body. Also your TestCase.php should use the FestTheDatabase trait. In the examples directory you can see an example TestCase.php and unit test.

In test cases

To actually execute the database refresher you need to use ShouldFest trait in your test cases. This traits is used like the ShouldQueue interface, it only executes the code if it's detected. It also replaces the RefreshDatabase trait from Laravel.


namespace Tests\Unit;

use Tests\TestCase;
use Dees040\Festing\ShouldFest;

class ExampleTest extends TestCase
    use ShouldFest;
     * A basic test example.
     * @return void
    public function testBasicTest()


The package come with a command (make:fest) which is the same as php artisan make:test. The only difference is that it uses the ShouldFest trait instead of the default RefreshDatabase trait provided by Laravel.


Check the config file for descriptions about all the config.

Cached data

Before we cache the data to make the tests significantly faster we run a list of artisan commands. Be default we run php artisan migrate. But if you'd like to change this or want to run more commands (i.e. php artisan db:seed) you can change the commands array config value.


Fasten up your unit tests in Laravel by more than 100%







No packages published