Laravelで書くテスト例(HTTPテスト編)

プログラミングをしていると気が付いたらこんなところにバグが、そこは修正していないのに、、、

そんな経験のある方も多いのではないのでしょうか。

今回はLaravelで行うHTTPテストについて実例を交えて紹介していきたいと思います!

自分の修正で、自分が思った以外のところがバグるなんてことは、よくある話。

こちらは社内教育用に開発している求人サイトのwebアプリケーションです。

ルーティングは以下のようになっています。

http://localhost:8080/admin/projectsにアクセスするとProjectsControllerが呼び出されprojects.indexをリターンし求人情報が一覧で表示されます。

ProjectsControllerでは権限のあるユーザーのみ管理者ページへ、それ以外のユーザーは一般画面へと遷移させるようになっています。

しかし、下記の画像では権限の無い場合にも`projects.index`をリターンしているため、ブラウザではこのようなエラー表示となっています。


上記で紹介したケースは、実際にルーティングのrename作業の際に発生し、マージされてしまったバグです。

このようなバグを未然に防ぐために、HTTPテストを作成していきましょう!

下記のコマンドを実行するとテストコードが生成されます。

$ php artisan make:test GuestHttpTest

GuestHttpTestというファイル名のテストコードが無事生成されました。

Webプログラムの開発では、クライアントがどのようなパラメータを送信し、サーバーがどのようなレスポンスを返しているのか正確に理解している必要があります。

# 主なHTTPレスポンスのステータス番号の一覧です。
100番台は、情報です。
200番台は、正常処理(成功)を意味します。
300番台は、リダイレクト関連です。
400番台は、クライアント側のエラーです。
500番台は、サーバー側のエラーです。

今回は一般ユーザーで全画面にアクセスした場合のテストコードを書いていきます。

一般ユーザーでadmin画面にアクセスした場合は権限がない為、リダイレクトされ302がレスポンスとして返されます。

今回、エラーになってしまっていたURI(赤枠)も作成しました。

下記のコマンドでphpUnitを実行できます。

$ phpunit

指定したクラスのみテストすることもできます。

$ phpunit 実行したいテスト

それでは、実行していきましょう。

実行したテストが21で .は成功、Fは「Failure」でSは「Skipped」です。

失敗の場合は、詳しくエラーメッセージが出ます。

しっかりとエラーが出ましたね!

このようにあらかじめテストコードを作成しておくことで、コーディングによるデグレを防ぎ、品質よいアプリケーションを作成することができます。

ぜひ参考にしてみてください!