1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

laravel Featureテストコードで自らにリクエストを送信する方法

Posted at

概要

  • laravelのテストコードにてリクエストを送る方法をまとめる。

方法

  1. vendor/laravel/framework/src/Illuminate/Foundation/Testing/TestCase.phpを継承しているFeatureのテストコードを用意する。($php artisan make:test テストクラス名でテストクラスを生成すれば良い。)

  2. Featureテストのテスト関数内に下記のように記載することでGETのリクエストを送信する事ができる。レスポンスが返される。

    $response = $this->get($url, $requestBody, $header);
    
  3. $urlにはルーティングで定義しているパス部分(ドメイン以外)を格納して渡す。例えばhttp://localhost/indexのエンドポイントにGETのリクエストを送りたい場合、$url = '/index';とする。$urlは必須で渡す必要がある。

  4. $requestBodyにはその名の通りリクエストボディーを配列で定義・格納して渡す。$requestBodyの受け渡しは任意である。

  5. $headerにはその名の通りヘッダー情報を定義して渡す。$headerの受け渡しは任意である。

  6. その他の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);
  7. 上記の関数はvendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.phpにて定義されている。

  8. MakesHttpRequestsクラスはvendor/laravel/framework/src/Illuminate/Foundation/Testing/TestCase.phpのTestCaseクラスでuseされ、このTestCaseクラスを継承してアプリ名ディレクトリ/tests/TestCase.phpのTestCaseクラスが定義され、このTestCaseクラスを継承してFeatureテストのクラスが定義されているため今回の関数を使用する事ができる。

  9. リクエストを送る関数を見ているとgetJson()などの関数が存在する。こちらはちょっと処理を追ったらリクエストを投げる時パラメーターを配列のまま渡すのではなくJSONに一回変換してから「raw body data」としてエンドポイントに渡しているようだ。laravelのドキュメントにも記載があった。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?