🏖️

Laravel 8.55 こんにちは assertInvalid、またね assertSessionHasErrors

2021/08/18に公開

本題

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