環境
- windows10
- DockerDesktop for Win 3.5.x
- Laravel 8.x
- PHP 8.x
- VsCode
- gitbash 2.32.0.1
テスト用のDBを作成することで何がうれしいのか
- DBが一つしかないとテスト後にデータがすべて吹っ飛んでしまう(Laravelでデータベースのテストを行う際、RefreshDatabaseでテスト後に不要データをクリアする前提)
設定手順
大きくは以下の手順です。
- docker-compose.ymlにテスト用のdbコンテナを記述
- .env.testingを作成
docker-compose.ymlにテスト用のdbコンテナを記述
※該当箇所のみ抜粋
テスト用のDBサービスとついでにphpmyadminも作成
db-dl-test:
image: mysql:latest
container_name: db-dl-test
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: db_stocker_test
TZ: "Asia/Tokyo"
command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
volumes:
- ./docker/db/my.cnf:/etc/mysql/conf.d/my.cnf
ports:
- 3501:3306
phpmyadmin-dl-test:
image: phpmyadmin/phpmyadmin
container_name: phpmyadmin-dl-test
environment:
- PMA_ARBITRARY=1
- PMA_HOST=db-dl-test
- PMA_USER=root
- PMA_PASSWORD=root
links:
- db-dl-test
ports:
- 8581:80
volumes:
- /sessions
.env.testingを作成
cp .env.example .env.testing
.env.testingにデータベースの接続情報を追記
APP_ENV=testing
DB_CONNECTION=mysql
DB_HOST=db-dl-test // docker-compose.ymlのサービス名
DB_PORT=3306
DB_DATABASE=db_stocker_test // docker-compose.ymlのMYSQL_DATABASE
DB_USERNAME=
DB_PASSWORD=
アプリケーションkeyを生成
php artisan key:generate --env=testing
設定自体は以上です。テスト実行後にテスト用のDBのデータのみ消えていれば成功です
テスト用のDBに対してマイグレーション等を行う方法
artisanコマンドの末尾に --env=testingを付けるだけでOK
php artisan migrate --env=testing
php artisan db:see --env=testing
まとめ
いかがでしたでしょうか。本記事では、Docker環境でLaravelプロジェクトのテスト用DBを作成する方法について紹介しています。本番用のデータを永続化させるためにはテスト用のDBの作成は必須になるかと思いますので、ぜひ参考にしてみてください。