LoginSignup
0
0

More than 1 year has passed since last update.

LaravelのDocker環境でDBを二つ立ち上げて、アプリケーション用DBとユニットテスト用DBを切り替える方法

Last updated at Posted at 2021-05-12

アプリケーション用DBとユニットテスト用のDBを分けたいときがあると思います
よく見かける手法がユニットテストをインメモリDBとして立ち上げてそこでデータを投入する方法です
今回は、インメモリDBではなく、通常使用するようなDB(オンディスクDBと呼ばれるらしい)でユニットテストの時だけ切り替える方式です

前提

Doker環境で二つのmysqlを立ち上げます
二つどうやって立ち上げるかわかない方はこちらの記事を参照してください

結論

  1. テストDB用のドライバーを設定
  2. ユニットテスト実行時に、そのドライバーを指定

設定方法詳細

テストDB接続用のドライバーを設定する

LaravelがテストDBに接続できるようにドライバーを設定します

config/database.php
'test_mysql' => [
    'driver' => 'mysql',
    'host' => 'test_mysql',
    'port' => '3306',//ここが3307だと繋がらない。なんで?
    'database' => 'your_test_db',
    'username' => 'user',
    'password' => 'password',
    'unix_socket' => '',
    'charset' => 'utf8mb4',
    'collation' => 'utf8mb4_unicode_ci',
    'prefix' => '',
    'prefix_indexes' => true,
    'strict' => false,
    'engine' => 'InnoDB',
    'options' => array_filter([
        PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
    ]),
],

phpunitの実行時のDBドライバーを変更

ユニットテストを実行したときだけテストDBを読み込むようにドライバーを指定します

phpunit.xml
//before
//<server name="DB_CONNECTION" value="mysql"/>

//after
<server name="DB_CONNECTION" value="test_mysql"/>

疑問

config/database.phpでportをデフォルト3306にしないと接続できないのはなぜなんだろう。。。
dockerでテスト用DBは3307にしていて、phpmyadminでは3307で接続できているのに
誰か知っていたらコメントなどで教えてください

 宣伝

ツイッターもやってます
技術や製品開発に関する事などを呟いてますので、フォローお願いします
https://twitter.com/wkyIghw8MlLpyJE

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0