概要
Laravel sail での開発環境で、PHPUnitをテスト用DBで実行するための手順を記載する。
(自分の備忘録用の記事になります)
前提
- Docker実行環境が整っていること
- Laravelの実行環境が整っていること
- Mysqlが使用できる環境であること
環境
- php 8.1.4
- Laravel 8.83.16
- Mysql 8.0.28
手順
-
Laravel, sailをインストールする。
$ composer create-project laravel/laravel:^8.0 sail-test $ cd sail-test $ composer require laravel/sail --dev $ php artisan sail:install Which services would you like to install? [mysql]: [0] mysql [1] pgsql [2] mariadb [3] redis [4] memcached [5] meilisearch [6] minio [7] mailhog [8] selenium > 0,7 Sail scaffolding installed successfully.
-
aliasを登録します。
alias sail='[ -f sail ] && bash sail || bash vendor/bin/sail'
-
各コンテナを起動させる。
$ sail up -d
-
sail コマンドでsanctum、breezeをインストールする。
(Breezeをインストールすると、Breezeに関するDBを使用したテストも用意できるのでBreezeをインストールしてます。)$ sail composer require laravel/breeze --dev $ sail artisan breeze:install
-
.env.testingファイルを作成すること
$ cp .env.example .env.testing
-
.env.testing
ファイルの中身を修正するDB_CONNECTION=mysql DB_HOST=mysql // docker-compose.ymlのmysqlのホスト名にする DB_PORT=3306 DB_DATABASE=testing // test用のテーブルを記載 DB_USERNAME=sail // 修正箇所 DB_PASSWORD=password // 修正箇所
デフォルトのMysqlのテーブル(sail ユーザでログインした場合)
以下のコマンドでmysqlに接続する。mysql -h 127.0.0.1 -u sail -P 3306 -p mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | laravel | | testing | +--------------------+ 3 rows in set (0.01 sec)
-
testing用のAPP_KEYを生成する。
$ sail artisan key:generate --env=testing
-
環境変数をクリアする。
$ sail artisan config:clear
結果
これでテスト用DBを使用してsail test
を実行できるようになりました!
$ sail test
<省略>
PASS Tests\Feature\ExampleTest
✓ example
Tests: 17 passed
Time: 2.51s