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です。