Laravelのフォームリクエストのテスト方法を考えてみた by あはれん

PHP Conference Japan 2021
Regular session (25 mins)
Test / Quality Laravel

Laravelのフォームリクエストのテスト方法を考えてみた

yu12co_mm あはれん yu12co_mm
1

LaravelのフォームリクエストのprepareForValidationでは
バリデーションを実行する前にリクエストデータを加工することができます。
リクエストデータを小文字に統一することや
[name=month value=10]、[name=day value=2]の2つリクエストデータを
[name=date value=102]という1つのリクエストデータにmergeすることができます。

ですが、prepareForValidationでmergeして新たなリクエストデータを作るとテストがしにくなってしまうのです。
基本は、Laravelのフォームリクエストをテストするとき、
Validatorファサードでバリデーションインスタンス生成して
passesメソッドに想定していデータを受け渡して確認するのですが、これが使えなくなるのです。

こういった場合のテスト方法として、以下の3つが考えられます。

  1. Validatorファサードを使わず、自己流でバリデーションインスタンス生成してテストする
  2. フォームリクエスト単位ではなくFeatureTestとして大まかにテストする
  3. Laravel Duskを利用したE2Eテストで大まかにテストする

それぞれについて試した結果について話します。

本セッションでは主にLaravelのフォームリクエストとテストについて話します。