モデルを利用する - d-sazanami/laravel-jissenkaihatsu-v1 GitHub Wiki
本の内容
本を順番通り実行すると、前の「シーディングの利用」で、 people
テーブルにid=1のデータが作成されている状態になる。
その状態で、「モデルを利用する」のコードでテストを実行すると、name=DUMMYのデータはid=1になりえない。
対応
MySQLに接続して、直接truncateする
1. WSLのターミナルから、DB接続
docker-compose exec laravel.test php artisan db --env=testing
mysql
コンテナにアタッチして、mysql
コマンドで直接見に行くと、日本語の文字表示が「????」になる。
artisanを使うことで、Laravelがいい感じに言語設定周りも面倒見てくれるらしく、日本語の文字も正しく表示されるので、artisan経由で接続する。
2. truncate
> truncate people;
> SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'laravel_app_test' AND TABLE_NAME = 'people';
+----------------+
| AUTO_INCREMENT |
+----------------+
| NULL |
+----------------+
1 row in set (0.02 sec)
そもそも
PHPUnitテストでデータの状態をテストする際に、テストケースには前提となるデータ状態はコードで指定する。今回は本の順番で、データをinsertする準備を説明してから、データを初期化を説明している都合、手動でtruncateしている。勉強用の環境でなければ、テスト環境のデータを手動でいじる事は普通は悪手である。
ref
- auto_increment状態の調べ方