いい感じの方法がフレームワークで提供されてるのかな?と思ったけど、そうでもなさそうだった。
- https://laracasts.com/discuss/channels/general-discussion/how-to-migrate-a-testing-database-in-laravel-5
- https://laracasts.com/discuss/channels/testing/how-to-specify-a-testing-database-in-laravel-5
ここでの方法は、config/database.php
に以下のような設定を追加する
'mysql_testing' => [ 'driver' => 'mysql', 'host' => env('TESTING_DB_HOST', 'localhost'), 'database' => env('TESTING_DB_DATABASE', 'forge'), 'username' => env('TESTING_DB_USERNAME', 'forge'), 'password' => env('TESTING_DB_PASSWORD', ''), 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', 'strict' => false, ],
んでもって、後は.env
ファイルに設定を書く感じだ。
TESTING_DB_DATABASE=hoge_test TESTING_DB_USERNAME=root
マイグレーションの処理は、
php artisan migrate --database=mysql_testing
こんな感じで、app/database.php
にて追加した、mysql_testing
を指定する事になる。
もしくは、 tests/TestCase.php以下に以下のように書くことで毎回マイグレーションの処理を流して、リセットする事が可能。
public function setUp() { parent::setUp(); Artisan::call('migrate'); } public function tearDown() { Artisan::call('migrate:reset'); parent::tearDown(); }
railsみたいに、config/database.yml
に書いといて分ける方式がないのかなぁとイメージしていたー。
もしどなたかご存知でしたら教えていただけるとありがたいです。
Laravelさわっているとめっちゃ楽しくて素敵。
[追記]
忘れてたけど、phpunit.xml
に、以下を追加しないとphpunit実行した時に、せっかく設定したDB_CONNECTION
が使われないのだった。
<env name="DB_CONNECTION" value="mysql_testing"/>