Skip to content

πŸš€ Super-fast alternative to running database migrations (and optionally, seeds) during Tests, for Lumen & Laravel. Can save 75% of the migration (and seed) setup time, versus using the regular DatabaseMigrations trait.

Notifications You must be signed in to change notification settings

AndrewGatenbyVS/snap-migrations

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

31 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

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.

About

πŸš€ Super-fast alternative to running database migrations (and optionally, seeds) during Tests, for Lumen & Laravel. Can save 75% of the migration (and seed) setup time, versus using the regular DatabaseMigrations trait.

Topics

Resources

Stars

Watchers

Forks

Contributors 4

  •  
  •  
  •  
  •  

Languages