Laravel + postgresSQLを使ったサイトで unit test を書いてたが、既存のデータベースを使うと、テストが意図しない挙動になることがあったので、汚れていないDBを使いたくなったので、調べてやってみたら、意外と詰まってしまったという話。 環境 sqlite in memory database を使う方法 config/database.php config/database.php phpunit.xml TestCase.php Sqliteでエラーがでる場合の対処1 Driver not found ALTER TABLE SYNTAX ERROR Sqliteでエラーがでる場合の対処2 環境 laravel 5.x PostgreSQL sqlite in memory database を使う方法 config/database.php 環境変数で default 値を差し替えれるようにする 'default' => env('DB_DEFAULT', 'pgsql'), config/database.php memory database の定義を作る 'sqlite_testing' => [ 'driver' => 'sqlite', 'database' => ':memory:', 'prefix' => '', ], phpunit.xml 環境変数追加。環境変数を与える方法は別に何でも良い。
public function setUp() { parent::setUp(); $this->artisan('migrate'); $this->artisan('db:seed'); } public function tearDown() { $this->artisan('migrate:reset'); } これで上手くいく人は上手くいく。