.env.testing にテスト用DB情報、.env にローカル用DB環境を設定し、
php artisan config:cache を実行すると、.envの内容がキャッシュされ(bootstrap/cache/config.php 化され)それが最優先になる。
つまり、php artisan test を実行すると、.env.testingを見ずに、キャッシュされた .env(bootstrap/cache/config.php)のほうをみてしまう。(試したら実際そうだった)
そうすると、php artisan test を実行すると、ローカル環境のDBに対してテストを実施してしまう。
とくに use RefreshDatabase;なんか使ってたときには、ローカル環境のDBをDropしてマイグレーションし直してしまう
さらに怖いことには、本番環境で php artisan test なんかしたときには、本番DBを消し飛ばしてしまう可能性も。
本番環境では php artisan test コマンドを実行しない事が大切と言われますが、人間なのでやらかしかねないので、test/TestCase.php に以下のコードを記載しました。
これで、APP_ENV が testing 以外ならばテストが実行されなくなります。
tests/TestCase.php
<?php
namespace Tests;
use Illuminate\Foundation\Testing\TestCase as BaseTestCase;
abstract class TestCase extends BaseTestCase
{
protected function setUp(): void
{
parent::setUp();
if (!app()->environment('testing')) {
exit("テスト環境以外でテストを実行しようとしています。中止します。\n");
}
}
}