Laravelの単体テストでは、次のようなJSON APIをテストできます。
_$this->post('/user', ['name' => 'Sally'])
->seeJson([
'created' => true,
]);
_
しかし、応答を使用したい場合はどうでしょう。 $this->post()
を使用してJSON応答を(配列として)取得するにはどうすればよいですか?
現在、5.3で機能しています...
$content = $this->get('/v1/users/1')->response->getContent()
;
ただし、response
はテストランナーではなく応答を返すため、チェーンは中断されます。そのため、応答を取得する前に、チェーン可能なアサーションを作成する必要があります。
$content = $this->get('/v1/users/1')->seeStatusCode(200)->response->getContent()
;
コンテンツを取得する適切な方法は次のとおりです。
$content = $this->get('/v1/users/1')->decodeResponseJson();
-> get()の代わりに、jsonで作業するときにjsonメソッドを使用したい
$data = $this->json('GET', $url)->seeStatusCode(200)->decodeResponseJson();
同様の問題が発生し、組み込みの$ this-> get()メソッドで$ this-> getResponse()-> getContent()を使用できませんでした。いくつかのバリエーションを試しましたが、成功しませんでした。
代わりに、呼び出しを変更して完全なhttp応答を返し、そこからコンテンツを取得する必要がありました。
// Original (not working)
$content = $this->get('/v1/users/1')->getContent();
// New (working)
$content = $this->call('GET', '/v1/users/1')->getContent();
ただ共有したいので、$this->json()
でも同じように使用しています:
$response = $this->json('POST', '/order', $data)->response->getContent();
しかし、json応答を使用してデコードするためにもう1行追加しました。そうしないと、decodeResponseJson()
が機能しませんでした。
$json = json_decode($response);
より良い方法を見つけました:
$response = $this->json('POST', '/order', $data)->response->getOriginalContent();
このメソッドは、応答jsonを配列として返します。