概要
- laravelのテストコードにてリクエストを送る方法をまとめる。
方法
-
vendor/laravel/framework/src/Illuminate/Foundation/Testing/TestCase.php
を継承しているFeatureのテストコードを用意する。($php artisan make:test テストクラス名
でテストクラスを生成すれば良い。) -
Featureテストのテスト関数内に下記のように記載することでGETのリクエストを送信する事ができる。レスポンスが返される。
$response = $this->get($url, $requestBody, $header);
-
$url
にはルーティングで定義しているパス部分(ドメイン以外)を格納して渡す。例えばhttp://localhost/index
のエンドポイントにGETのリクエストを送りたい場合、$url = '/index';
とする。$url
は必須で渡す必要がある。 -
$requestBody
にはその名の通りリクエストボディーを配列で定義・格納して渡す。$requestBody
の受け渡しは任意である。 -
$header
にはその名の通りヘッダー情報を定義して渡す。$header
の受け渡しは任意である。 -
その他のHTTPメソッドに対応するリクエストを送信する関数をまとめる。
HTTPメソッド 関数 GET $this->get($url, $requestBody, $header);
POST $this->post($url, $requestBody, $header);
PUT $this->put($url, $requestBody, $header);
PATCH $this->patch($url, $requestBody, $header);
DELETE $this->delete($url, $requestBody, $header);
-
上記の関数は
vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php
にて定義されている。 -
MakesHttpRequestsクラスは
vendor/laravel/framework/src/Illuminate/Foundation/Testing/TestCase.php
のTestCaseクラスでuseされ、このTestCaseクラスを継承してアプリ名ディレクトリ/tests/TestCase.php
のTestCaseクラスが定義され、このTestCaseクラスを継承してFeatureテストのクラスが定義されているため今回の関数を使用する事ができる。 -
リクエストを送る関数を見ているとgetJson()などの関数が存在する。こちらはちょっと処理を追ったらリクエストを投げる時パラメーターを配列のまま渡すのではなくJSONに一回変換してから「raw body data」としてエンドポイントに渡しているようだ。laravelのドキュメントにも記載があった。