画竜点睛を衝く@mapyo

日々やった事をつらつらと書くブログです

Laravel5.1でphpunitで使うDBと開発で使うDBを分ける方法どうするのがいいのかー

いい感じの方法がフレームワークで提供されてるのかな?と思ったけど、そうでもなさそうだった。

ここでの方法は、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"/>