Laravelのテスト失敗時のデバッグ方法とトラブル解決法を初心者向けに完全解説
生徒
「Laravelのテストを実行したら、赤いエラーがたくさん出て止まってしまいました……。」
先生
「それはテストが失敗したサインですね。でも怖がらなくて大丈夫です。」
生徒
「エラーの文字が多すぎて、何を見ればいいのか分かりません。」
先生
「テスト失敗時の見方と直し方を順番に覚えれば、落ち着いて対応できますよ。」
1. Laravelのテストが失敗するとはどういう状態?
Laravelのテストが失敗するとは、「プログラムが想定どおりに動かなかった」ことを意味します。テストは答え合わせのようなもので、期待した結果と実際の結果が違うと失敗になります。
学校のテストで答えが違うと×が付くのと同じで、Laravelは間違いを正直に教えてくれています。
2. エラーメッセージは怖くない
画面に大量の英語や記号が表示されると不安になりますが、これは「どこで何が起きたか」を教えてくれる説明書です。
特に注目するのは、一番下や赤く表示されている行です。ここに原因が書かれていることが多いです。
3. php artisan test の結果を正しく読む
Laravelのテストは、次のコマンドで実行します。
php artisan test
失敗すると「FAILED」や「ERROR」と表示されます。FAILEDは結果が違う場合、ERRORは途中で止まった場合です。
4. dumpやddを使って中身を確認する
デバッグとは「中をのぞいて確認する」ことです。Laravelではdumpやddという命令が使えます。
dump($user);
dumpは変数の中身を表示して処理を続けます。ddは表示して処理を止めます。
dd($response);
これは「箱の中に何が入っているか確認する」作業と同じです。
5. assertの失敗内容を確認する
Laravelのテストでは、assertという命令で結果を確認します。assertとは「本当かどうか確かめる」という意味です。
$this->assertEquals(200, $response->status());
このテストが失敗した場合、「期待した値」と「実際の値」が表示されます。数字の違いを落ち着いて見比べましょう。
6. データベース関連のトラブル対処法
テストでよくある失敗が、データベースの問題です。データが存在しない、保存されていないなどが原因です。
$this->assertDatabaseHas('users', [
'email' => 'test@example.com',
]);
これは「usersテーブルにこのデータが本当にあるか」を確認するテストです。
7. エラーが出たときの考え方のコツ
テストが失敗したときは、「テストが悪いのか」「処理が悪いのか」を切り分けます。いきなり全部直そうとせず、一つずつ確認することが大切です。
これは部屋の電気がつかないときに、電球・スイッチ・コンセントを順番に確認するのと同じ考え方です。
8. Laravelのログを活用する
Laravelは動作の記録をログとして保存しています。ログは「行動の履歴ノート」のようなものです。
\Log::info('ここまで処理が来ました');
どこまで処理が進んだか分かるので、テスト失敗の原因を見つけやすくなります。