設定まとめ
- config/database.php の
'driver' => 'sqlite'
の database の値として:memory:
を指定する。 - phpunit.xml の env に
name="DB_CONNECTION" value="sqlite"
を追加する。
具体的な変更内容
diff --git a/config/database.php b/config/database.php
index 1ba369e..6254fe3 100644
--- a/config/database.php
+++ b/config/database.php
@@ -35,7 +35,7 @@ return [
'sqlite' => [
'driver' => 'sqlite',
- 'database' => env('DB_DATABASE', database_path('database.sqlite')),
+ 'database' => ':memory:',
'prefix' => '',
],
diff --git a/phpunit.xml b/phpunit.xml
index bb9c4a7..bbec9b0 100644
--- a/phpunit.xml
+++ b/phpunit.xml
@@ -27,5 +27,6 @@
<env name="CACHE_DRIVER" value="array"/>
<env name="SESSION_DRIVER" value="array"/>
<env name="QUEUE_DRIVER" value="sync"/>
+ <env name="DB_CONNECTION" value="sqlite"/>
</php>
</phpunit>
注意点
:memory
ではなく、:memory:
が正しい。間違えた場合、 :memory というファイルが作成され、そこにデータベース内容が記録される。- 普段の開発や運用は MySQL で、ユニットテストのみ SQLite としている。このために、ユニットテストでのみマイグレーションが失敗する、という現象が起きた。よって、データベースに固有のマイグレーションを行なっている場合は、本投稿の内容は実行できないかもしれない。
おわりに
ユニットテストを最近ずうっとサボっておりました><。
そろそろやってみようと思い立ち、どうせ始めるならプロジェクトの最初のうちの方がよいので、このタイミングとしました。
普段の開発で使っているデータベースと、ユニットテストで使っているデータベース、どちらにも影響が内容にしたい。 ユニットテストのデータベースは、テストを実行するたびに作成、テスト、破棄をしたい。
何かよい方法はないかと思っておりましたら、次のページにたどり着きました。ありがとうございます!