Laravelでエラーメッセージや例外をテストする方法を初心者向けにやさしく解説
生徒
「Laravelでエラーが出たときって、ちゃんと表示されているかテストできるんですか?」
先生
「はい、エラーメッセージや例外もテストで確認できます。」
生徒
「失敗する動きもテストするってことですか?」
先生
「その通りです。失敗したときの動きを確認するのも、とても大切なんですよ。」
1. Laravelのテストでエラーを確認する理由
Laravelのテストでは、正常に動く場合だけでなく、エラーが起きたときの動作も確認します。たとえば、入力が足りないときにエラーメッセージが表示されるか、存在しないデータにアクセスしたときに正しい画面になるか、といった点です。これは、転んだときにちゃんとクッションがあるかを確かめるようなものです。失敗したときの安全確認が、アプリの信頼につながります。
2. エラーメッセージと例外の違い
エラーメッセージとは、ユーザーに「入力が間違っています」などと伝える表示です。一方、例外とは、プログラムの中で「これ以上処理できない」と判断したときに投げられる特別なエラーです。例外は内部的なトラブル、エラーメッセージは利用者向けの注意書き、と考えると分かりやすくなります。
3. バリデーションエラーをテストする方法
Laravelでは、入力チェックをバリデーションと呼びます。入力が足りない場合、エラーメッセージが自動で表示されます。この動きをテストで確認することができます。ここでは、名前が未入力のときにエラーになるかをテストしています。
public function test_validation_error()
{
$response = $this->post('/register', [
'name' => '',
]);
$response->assertSessionHasErrors('name');
}
4. エラーメッセージの内容を確認する
エラーが出るだけでなく、正しいメッセージが表示されているかも重要です。表示文が違うと、ユーザーが混乱してしまいます。テストでは、セッションに保存されたエラーメッセージの内容を確認できます。文字が合っているかをチェックすることで、安心して画面を出せます。
public function test_error_message_text()
{
$response = $this->post('/register', [
'name' => '',
]);
$response->assertSessionHasErrors([
'name' => '名前は必須です',
]);
}
5. HTTPステータスコードのエラーをテストする
Webの世界では、数字で状態を表します。これをステータスコードと呼びます。たとえば、404は「ページが見つからない」という意味です。Laravelのテストでは、この数字も確認できます。ページが存在しないときに、正しく404になるかを確認するのはとても大切です。
public function test_not_found_error()
{
$response = $this->get('/not-exists-page');
$response->assertStatus(404);
}
6. 例外が発生することをテストする
例外とは、プログラムが意図的に処理を止める仕組みです。Laravelでは、特定の条件で例外を投げることがあります。テストでは、その例外が本当に発生するかを確認できます。これは、非常ベルがちゃんと鳴るかを試す訓練のようなものです。
public function test_exception_thrown()
{
$this->expectException(\Exception::class);
throw new \Exception('エラーが発生しました');
}
7. 例外を表示せず画面を確認する
テスト中は、例外をそのまま画面に出さず、エラーページとして確認したい場合もあります。そのときは、例外処理を通常通り動かします。これにより、ユーザーが見る画面が正しいかを確認できます。内部エラーを見せない工夫も、品質の一部です。
public function test_error_page_display()
{
$response = $this->get('/error-page');
$response->assertSee('エラーが発生しました');
}
8. 初心者が意識したいエラーテストの考え方
エラーのテストは、失敗を探す作業です。最初は不安に感じるかもしれませんが、「間違えたときにどうなるか」を確認するだけです。正しく動くことと同じくらい、正しく止まることも大切です。エラーを味方につけることで、安心して使えるLaravelアプリを作れるようになります。