LaravelのRefreshDatabaseはいつ実行されるか、なにを実行しているか
いつ実行されるか
前提として、PHPUnitでのsetUp()
等の実行タイミングから。
setUpBeforeClass()
がテストクラスごとに、最初のテストメソッドの実行前に。setUp()
がテストメソッドごとに、テストメソッド実行前に。tearDown()
がテストメソッドごとに、テストメソッド実行後に。tearDownAfterClass()
がテストクラスごとに、最後のテストメソッドの実行後に。
以下が詳しい。
4. フィクスチャ — PHPUnit latest Manual
このうち、RefreshDatabaseの実行は、setUp()
のタイミングで行われる。
ただし毎回は実行されない。一度実行されるとRefreshDatabaseState::$migrated
が真になり、このクラス変数が真の場合は実行されないので、実質テストランナーの実行ごとに一度しか実行されない。
なにを実行しているか
php artisan migrate:fresh
, ただしテストクラスでの指定によっては、--drop-views
, --drop-types
, --seed
のオプションが有効になる。
たとえば--seed
に関しては、テストクラスに$seed
というプロパティを真で設定しておけば、有効になる。
おまけ
RefreshDatabaseは実際にはIlluminate\Foundation\Testing\TestCase
内で実行されるため、PHPUnit\Framework\TestCase
を継承したクラスでuse
しても駄目、Tests\TestCase
を継承する。