Laravelでバリデーションをテストする方法を完全解説!初心者でも安心のLaravelテスト入門
生徒
「Laravelで入力チェックをしたんですが、それが正しく動いているか確認する方法はありますか?」
先生
「ありますよ。Laravelではテスト機能を使って、バリデーションが正しく動作しているかを確認できます。」
生徒
「テストって難しそうなイメージがあります…。」
先生
「大丈夫です。画面操作を自動で確認するような感覚なので、順番に見ていきましょう。」
1. Laravelのバリデーションテストとは?
Laravelのバリデーションテストとは、フォームなどから送られてくる入力内容が正しいかどうかを自動で確認する仕組みです。バリデーションとは「入力チェック」のことで、名前が空でないか、メールアドレスの形になっているかなどを確認します。
テストは、人が毎回画面を操作して確認する代わりに、プログラムが自動で確認してくれる仕組みです。料理で例えると、味見を毎回しなくても、分量が正しければ同じ味になると確認するようなものです。
2. Laravelでテストを書く準備
Laravelには最初からテスト機能が用意されています。特別なインストールは不要で、プロジェクトを作成した時点で使える状態です。テスト用のファイルはtestsフォルダにまとめられています。
今回は、画面の動きを確認するFeatureテストを使います。Featureテストとは、実際にページにアクセスするような形で確認するテストです。
3. シンプルなバリデーションの例
まずは、名前が必須であるバリデーションを設定した例です。必須とは「必ず入力してください」という意味です。
$request->validate([
'name' => 'required'
]);
この設定では、名前が空の場合にエラーになります。この動作をテストで確認します。
4. バリデーションエラーをテストする方法
次に、名前を入力しなかった場合にエラーになるかをテストします。テストでは、わざと空のデータを送信します。
public function test_name_is_required()
{
$response = $this->post('/register', [
'name' => ''
]);
$response->assertSessionHasErrors('name');
}
assertSessionHasErrorsは、「エラーがあるか」を確認する命令です。学校のテストで赤ペンが入っているかを見るようなイメージです。
5. 正しい入力のテスト方法
エラーだけでなく、正しく入力した場合に問題なく進めるかも確認します。これは「成功パターン」のテストです。
public function test_register_success()
{
$response = $this->post('/register', [
'name' => '山田太郎'
]);
$response->assertSessionDoesntHaveErrors();
}
assertSessionDoesntHaveErrorsは、「エラーが一つもない」ことを確認します。問題なく提出できたかを確認するような感覚です。
6. 複数のバリデーションをテストする
実際のフォームでは、複数の入力項目をチェックします。例えば、名前とメールアドレスを確認する場合です。
$request->validate([
'name' => 'required',
'email' => 'required|email'
]);
emailは、メールアドレスの形かどうかを確認するルールです。封筒に正しい住所が書かれているか確認するようなものです。
7. 複数エラーのテスト例
名前もメールも未入力の場合、両方でエラーになるかをテストします。
public function test_multiple_validation_errors()
{
$response = $this->post('/register', []);
$response->assertSessionHasErrors(['name', 'email']);
}
配列で指定することで、複数のエラーをまとめて確認できます。
8. Laravelでバリデーションテストを行うメリット
Laravelでバリデーションをテストすることで、入力ミスによる不具合を事前に防げます。修正のたびに画面を操作しなくても、自動で確認できるため、作業効率も向上します。
特に初心者の方にとっては、「正しく動いている」という安心感を得られるのが大きなメリットです。毎回同じ確認をしてくれる、信頼できるチェック役がいるようなものです。