5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Laravel マイグレーションのロールバックテスト

Last updated at Posted at 2020-01-07

Laravelのマイグレーションはup, downを対にして書く必要があります。
ロールバックをする機会が少ないせいかdownの処理が壊れたままに開発を進めてしまうことが稀によくありました。

しかし、毎回downの処理が正しいのか手動でテストするのは面倒です。
そこでロールバックのテストを自動化したいと思いテストコードを考えました。

MigrateRollbackTest.php

tests/MigrateRollbackTest.php

tests/MigrateRollbackTest.php
<?php declare(strict_types=1);

namespace Tests;

class MigrateRollbackTest extends TestCase
{
    public function testRollback()
    {
        $this->artisan('migrate:fresh', ['--seed' => true]);
        $this->artisan('migrate:refresh');

        $this->assertTrue(true);
    }
}

$this->artisan() メソッドでLaravelのコマンドを実行できます。
シーディングのテストまで行いたい場合は、第二引数でオプションを渡せばokです。

ロールバックするには、最新のテーブル定義になっている必要があるので migrate:fresh で最新のテーブル構成にしたのち、 migrate:refresh ロールバック&マイグレーション再実行を行います。

phpunit.xml

phpunit.xml にテストスイートを追加します。

phpunit.xml
    <testsuites>
        <testsuite name="Database">
            <file>./tests/MigrateRollbackTest.php</file>
        </testsuite>

        <testsuite name="Unit">
            <directory suffix="Test.php">./tests/Unit</directory>
        </testsuite>

        <testsuite name="Feature">
            <directory suffix="Test.php">./tests/Feature</directory>
        </testsuite>
    </testsuites>

<testsuites> タグ内に Database テストスイートを追記します。

テストの実行

$ ./vendor/bin/phpunit

ロールバックのテストのみ実行したい

$ ./vendor/bin/phpunit --testsuite Database

オプションでテストしたいテストスイートを指定すればokです。

参考記事

関連記事

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?