🏖️
Laravel 8.55 こんにちは assertInvalid、またね assertSessionHasErrors
本題
Laravel 8.55 で、テスト用に assertValid / assertInvalid が追加になりました。
今まで、Feature でバリデーションのテストをする時は、
$this->post($url, ['name' => ''])->assertSessionHasErrors('name');
// 上記でもいいのですが、何でエラーが出ているのか区別が付かないから、
$this->post($url, ['name' => ''])->assertSessionHasErrors(['name' => '名前を入力して下さい。']);
と書いたりしたものでした。
これが、新しく登場した assertInvalid を使うと、
$this->post($url, ['name' => ''])->assertInvalid('name');
$this->post($url, ['name' => ''])->assertInvalid(['name' => '名前を入力して下さい。']);
$this->post($url, ['name' => ''])->assertInvalid(['name' => '入力して']); // エラーメッセージの一部のみ
どれでもOKになります。
しかも上記は、JSONの時でも(assertJsonValidationErrors を使わずに)OK だし、
何と言っても、メソッド名が短くなったので、目の疲れも軽減されます。
いいこと尽くめですね。
参考:本家ドキュメント
参考:https://github.com/laravel/framework/pull/38384
もっとも私は、日本語を入力するのも面倒なので、少し手を加えて、
$this->post($url, ['name' => ''])->assertSessionHasErrors(['name' => 'required']);
$this->post($url, ['name' => ''])->assertInvalid(['name' => 'required']);
とかで行けるようにしています。
Discussion