サーバー構築
dockerでテスト用のDBサーバーとphpMyAdminサーバーを立てる
docker Desktopアプリを起動
あらかじめフォルダや必要なファイルを置いていますので、Githubよりソースコードをクローンして使ってください。
git clone https://github.com/masayan1126/docker-laravel.git
ymlファイルがあるディレクトリに移動
cd docker-laravel
docker-compose.ymlのうち、テスト用のdbコンテナとphpmyadminコンテナの記載のみ抜粋しています。
ポイントは以下の3つです。
- container_nameの名前を本番のdbコンテナとは別にする(同じ名前のコンテナを立ち上げることはできないため)
- volumesでマウントするローカルファイルのパスを本番のdbコンテナとは別にする
- ホスト側のポート番号を本番のdbコンテナと同じにしない(同じマシン内で同じポート番号を指定することはできない)
docker-compose.yml
version: "3.8"
services:
db-test:
image: mysql:latest
container_name: db-test
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: recipe_test_db
TZ: "Asia/Tokyo"
command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
volumes:
- ./docker/db-test/data:/var/lib/mysql
- ./docker/db-test/my.cnf:/etc/mysql/conf.d/my.cnf
- ./docker/db-test/sql:/docker-entrypoint-initdb.d
ports:
- 3307:3306
phpmyadmin-test:
image: phpmyadmin/phpmyadmin
container_name: phpmyadmin-test
environment:
- PMA_ARBITRARY=1
- PMA_HOST=db-test
- PMA_USER=root
- PMA_PASSWORD=root
links:
- db-test
ports:
- 8889:80
volumes:
- /sessions
あらかじめ指定したイメージファイルをビルド
docker-compose build
コンテナ起動
docker-compose up -d
無事起動
Laravelでプロジェクト作成
ここまでで、サーバーの構築が完了したので、コンテナに入り、laravelプロジェクトを作成していきます。
appコンテナに入る
appコンテナ(アプリケーションサーバー)へ入る
docker-compose exec app bash
laravelのプロジェクトを作成する
laravelプロジェクトのベースを作成(laravel-portfolioの箇所は任意の名称ですが、変更した場合は、nginx/defalut.confの
root /var/www/laravel-portfolio/public;も変更する必要があるので注意)
composer create-project laravel/laravel laravel-portfolio
laravelのプロジェクトディレクトリに移動
cd laravel-portfolio
テスト用の設定
マイグレーション(DB)設定
.env.exampleファイルをコピーして、本番DB用の.envとテスト用のenv(.env.testing)を作成
.env
# ymlファイルのサービス名を指定
DB_HOST=db
DB_PORT=3306
# ymlファイルのMYSQL_DATABASEを指定
DB_DATABASE=performance_db
DB_USERNAME=root
DB_PASSWORD=root
.env.testing
# ymlファイルのサービス名を指定
DB_HOST=db-test
DB_PORT=3306
# ymlファイルのMYSQL_DATABASEを指定
DB_DATABASE=test_db
DB_USERNAME=root
DB_PASSWORD=root
.env.testingのAPP_KEYを生成
php artisan key:generate --env=testing
それぞれマイグレーション
php artisan migrate
php artisan migrate --env=testing
.gitignoreへ.env.testingを追加
.gitignore
.env
.env.testing
サンプルのテストファイルを実行
以下コマンドでテストを実行できる
.\vendor\bin\phpunit
もしくは
php artisan test
テスト結果
テストの種類
Featureテスト
実際の通信を伴う機能テスト(/tests/Feature)
1つのHTTPリクエスト単位の動きをテストする。
=ルーティング1つごとにテストクラス(ファイル)を作る
=コントローラのアクションメソッド単位でのテスト
UnitTestでテストした各クラスを結合した状態で
コントローラの動き(つまりリクエストを受けてレスポンスを返すまで)をテストするというイメージ。
作成用コマンド
php artisan make:test [テストケースクラス名]
Unitテスト
PHPクラス単位の単体テスト(/tests/Unit)
Service、Model、Middleware、Policyなど、
自分で作ったクラス1つ1つと対応するように
テストクラス(ファイル)を1つ1つ作る。
その対象クラスのメソッド1つ1つの動作を検証するための
テストケースをコードに書いていく。
作成用コマンド
php artisan make:test [テストケースクラス名] --unit
最後に
以上です。次回は実際にテストコードを書いてテストしてみたいと思います。
まとめ
いかがでしたでしょうか。本記事ではdockerとlaravelでPHPUnitのテスト環境を構築する手順について紹介しています。具体的には、テスト用のDBサーバーの起動後、コンテナ内でlaravelのプロジェクトを作成し、テスト用のマイグレーション設定を行なった後にサンプルのテストコードを実行しています。