Skip to the content.

Code Climate maintainability Code Climate technical debt GitHub last commit PHP from Packagist Packagist

Snap Migrations (for Lumen & Laravel)

This package is designed to be used within your TestCase class and allows for Lumen & Laravel applications to create a static SQL dump of a migrated (and seeded) database. It will automatically do this on the first Test run from a TestCase that uses this Trait. Each subsequent Test run will then use the SQL dumped copy of the database.

Install

Install the package via Composer:

composer require --dev andrewgatenby/snapmigrations

Usage

After a successful installation, you can add SnapMigration to your Test classes (potentially a parent class). This package is designed to replace the regular DatabaseMigrations class that you might use:

<?php

namespace Tests;

use AndrewGatenby\SnapMigrations\SnapMigrations;
use Illuminate\Foundation\Testing\TestCase as BaseTestCase;

abstract class MyAmazingTestCase extends BaseTestCase
{
    use SnapMigrations;
}

The Snap Migration SQL dump itself will be stored in storage/snap_migration.sql by default, but this can be modified by use of an environment variable called SNAP_MIGRATION_SQL_FILE. Note that it would still be within storage/.

If there is a new database migration created in database/migrations then Snap Migrations will burst its own cached copy and generate a new snapshot.

If the Snap Migration gets stuck or out of sync, you can manually delete the file and it will be built afresh.

The SnapMigrations Trait has its own setUp method as the main entry point. If your Test classes have their own setUp method, then you can alias the SnapMigrations::setUp method, similar to this:

<?php

namespace Tests;

use AndrewGatenby\SnapMigrations\SnapMigrations;
use Illuminate\Foundation\Testing\TestCase as BaseTestCase;

abstract class MyAmazingTestCase extends BaseTestCase
{
    use SnapMigrations {
        setUp as setUpSnapMigrations;
    }
    
    public function setUp()
    {
        // run setUp for Snap Migrations, which also calls parent::setUp()
        $this->setUpSnapMigrations();
        // my regular setUp tasks for MyAmazingTestCase
    }
}

Credit

This package was inspired by the awesome looking Snipe Migrations that Iā€™d tried to make use of first, but needed a Lumen-friendly implementation. It also uses the excellent MySQL Dump package.