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で十分。