Twinkle
Twinkle
Laravelのテストではデータベースに依存していい
「テストはデータベースに依存すべきではない」という思い込みを捨てられない人が多いので何度でも説明する。
データベースを使わなくていい時は使わない、を基本的な前提として「絶対にデータベースを使わない」は間違い。
LaravelではインメモリSQLiteを使ってデータベースに依存したテストができる。インメモリなので高速。
インメモリSQLiteはLarave4.0にもあるくらい昔から用意されてる機能。
https://github.com/laravel/framework/blob/4.0/src/Illuminate/Database/Connectors/SQLiteConnector.php
Sailでは本物のMySQLを使ったテストが標準。インストール時にphpunit.xml
を書き換えている。遅いのでSailでもインメモリSQLiteを使うことが多いけど。
https://github.com/laravel/sail/blob/1.x/src/Console/Concerns/InteractsWithDockerComposeServices.php#L213
データベースをテストするための機能がいろいろある。
https://laravel.com/docs/11.x/database-testing
こういう機能が用意されている以上「テストはデータベースに依存していい」がLaravelの方針。
Laravelの方針を無視してデータベースに依存しないようにすると無駄な苦労することになる。
https://laracasts.com/discuss/channels/testing/testing-repository-in-laravel