Laravel 8.51 で、テスト時の withoutExceptionHandling() の呼び出しが、かなり不要になった
本題
Feature テスト時、ステータスコードを調べる際に、プログラム内部で500エラーが発生していると、その原因を調べる為に、
$this->withoutExceptionHandling();
とメソッド上部に書いたりして、原因を把握したりしたものでした。
エディタの補完も利くし、慣れていれば、まぁさほど面倒には感じていませんでしたが、やはり地味に面倒だった事は確かです。これが、Ver.8.51からは、かなり不要になりました。ステータスコードを調べるアサーション(例:assertStatus()、assertOk() 等)を記述していて、500エラーが発生した際は、エラー原因(stack trace)をドカンと出してくれるようになりました。
参考:Track Exceptions and Display Them in Failed Tests
ただ、500エラー以外のステータスコードの不一致時や、そもそもデバッグ目的ではなく、例外のテストを行う場合なんかでは、まだ活躍の場もあったりはします。
しかしこのメソッド、テスト時はかなり必須でありながら、未だにドキュメントには載ってないんですね…。 2021年10月に載りました。
雑談モード
Laravel 5.5で、$this->withoutExceptionHandling(); が登場した訳ですが、このメソッドのオリジナルは、Tailwind CSS の作成者の Adam Wathan 氏なんですね。
テストの神様という異名?を持つ方ですが、何故か今は、CSS に行ってしまいました。
彼の「テスト講座」は、Laravel界隈では有名で、彼はこの講座や他の講座で一儲けして、会社を辞めて、今はオープンソース系に専念している訳ですね。
参考:https://adamwathan.me/2016/01/21/disabling-exception-handling-in-acceptance-tests/
参考:https://laravel-news.com/testing-laravel-middleware
Discussion