Laravel9 sailでテスト用MySQLのdockerコンテナの作成方法
Laravel9 sailでテスト用MySQLのdockerコンテナの作成方法について紹介します。
1.docker-compose.ymlに下記を追記
基本的にMySQLのコンテナイメージの記述箇所をコピーして、変更・追加と書かれている箇所を修正すればいいです。
尚、この記事は、Laravel sailを利用している事を前提としています。
また、dokcer-compose.ymlファイルはバージョンによって内容が変更される場合がありますので、参考程度にご利用ください。
mysql:
image: 'mysql/mysql-server:8.0'
ports:
- '${FORWARD_DB_PORT:-3306}:3306'
environment:
MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
MYSQL_ROOT_HOST: "%"
MYSQL_DATABASE: '${DB_DATABASE}'
MYSQL_USER: '${DB_USERNAME}'
MYSQL_PASSWORD: '${DB_PASSWORD}'
MYSQL_ALLOW_EMPTY_PASSWORD: 1
volumes:
- 'sail-mysql:/var/lib/mysql'
networks:
- sail
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-p${DB_PASSWORD}"]
retries: 3
timeout: 5s↓ 上記を元に下記をコピーして貼り付ける
mysql_test: # 追加
image: 'mysql/mysql-server:8.0'
ports:
- '${FORWARD_DB_PORT:-3307}:3306' # 変更
environment:
MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
MYSQL_ROOT_HOST: "%"
MYSQL_DATABASE: '${DB_DATABASE}_test' # 追加
MYSQL_USER: '${DB_USERNAME}'
MYSQL_PASSWORD: '${DB_PASSWORD}'
MYSQL_ALLOW_EMPTY_PASSWORD: 1
volumes:
- 'sail-mysql:/var/lib/mysql_test' # 追加
networks:
- sail
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-p${DB_PASSWORD}"]
retries: 3
timeout: 5s2.mysql_test起動
sail up -d
下記はYoutubeで解説している動画になります。
テスト用MySQLをアプリ用MySQLと一致させる方法について
1.テスト用のenvファイルを作成する。
.envファイルを元に.env.testingファイルを作成します。(コピー)
.env.testingファイルには下記の内容を記載します。
DB_CONNECTION=mysql
DB_HOST=mysql_test # 修正(docker-compose.ymlで指定したテスト用のDBホスト名)
DB_PORT=3306 # ここはdocker内部からアクセスするため、3306のままでOK
DB_DATABASE=books_test # 修正(ocker-compose.ymlで指定したテスト用のDB名)
DB_USERNAME=sail
DB_PASSWORD=password2.テストDBのmigrationをする
php artisan migrate --env=testinglaravelのphpunitの設定ファイルについて
下記サンプルです。
- testsuiteでUnitテスト、Featureテストを分けます。
- excludeでテストから除外したいファイルを指定します。
- coverageでカバレッジ対象を指定します。
- phpのenvセクションでenvファイルを指定します。この例だと、「.env.testing」ファイルが読み込まれます。
<?xml version="1.0" encoding="UTF-8"?>
テストコードの実行方法について
テストコードの実行方法はいくつかあります。
特にlaravel sailを利用していれば簡単にテストを実行する事が出来ます。
$ sail test 
$ sail php artisan test
$ sail shell 
$ ./vendor/bin/phpunit 
応用
testsuite毎にテストを実行できる
$ php artisan test --testsuite=Feature # featureのみ実行する
$ php artisan test --testsuite=Unit # Unitのみ実行する
excludeで不必要なテストを除外する 
<testsuite name="Feature"> 
    <directory suffix="Test.php">./tests/Feature</directory>
    <exclude>./tests/Unit/ExampleTest.php</exclude>
</testsuite>
helpのやり方 
$ sail php artisan test --helpLaravelのテストファイルの作成方法について
コマンドは下記です。sailを利用している場合は、sail php artisanと続けてください。
sailを利用していない場合は、sailは入力が不要です。
- featureテストファイルを作成したい場合は、オプションなし
- unitテストファイルを作成したい場合は、–unitとオプションをつけてください。
$ sail php artisan make:test UserTest # featureの作成 
$ sail php artisan make:test UserTest --unit # unitの作成