PCS開発チーム
PCS開発チーム
Laravel11で新規プロジェクト作成後はテスト用のデータベース設定が必須
Laravel11でSQLiteがデフォルトに変わったけどphpunit.xmlのインメモリSQLiteは無効なまま。何も設定しないままだとテストでSQLiteのデータベースが壊される。
// phpunit.xml
<!-- <env name="DB_CONNECTION" value="sqlite"/> -->
<!-- <env name="DB_DATABASE" value=":memory:"/> -->
再現手順
laravel new laravel11-sqlite --breeze --stack=blade --phpunit --database=sqlite --dark
cd laravel11-sqlite
php artisan db:seed
INFO Seeding database.
tinkerで見るとこの時点ではseederで作ったUserが存在している。
php artisan tinker
> User::first()
= App\Models\User {#5097
id: 1,
name: "Test User",
テスト実行後に見るとUserが消されている。
php artisan test
php artisan tinker
> User::first()
= null
テスト時にもdatabase/database.sqlite
が使われて上書きされた。
流石にこれは変なのでいずれ修正されるかもしれないけどそれまでは自分で対応。
<env name="DB_CONNECTION" value="sqlite"/>
<env name="DB_DATABASE" value=":memory:"/>
Sailを使っててもインメモリSQLiteに変えたほうがいい。
SQLiteでは使えない機能があって本物のMySQLなどを使ったテストが必要なプロジェクトはあるけどそんな規模のプロジェクトなら勝手に判断できる。
大半のLaravelプロジェクトではインメモリSQLiteで十分。