web-dev-qa-db-ja.com

Laravelテスト、JSONコンテンツの取得

Laravelの単体テストでは、次のようなJSON APIをテストできます。

_$this->post('/user', ['name' => 'Sally'])
    ->seeJson([
        'created' => true,
    ]);
_

しかし、応答を使用したい場合はどうでしょう。 $this->post()を使用してJSON応答を(配列として)取得するにはどうすればよいですか?

32
rap-2-h

現在、5.3で機能しています...

$content = $this->get('/v1/users/1')->response->getContent();

ただし、responseはテストランナーではなく応答を返すため、チェーンは中断されます。そのため、応答を取得する前に、チェーン可能なアサーションを作成する必要があります。

$content = $this->get('/v1/users/1')->seeStatusCode(200)->response->getContent();

29
Mike McLin

コンテンツを取得する適切な方法は次のとおりです。

$content = $this->get('/v1/users/1')->decodeResponseJson();
42
Jan Tlapák

-> get()の代わりに、jsonで作業するときにjsonメソッドを使用したい

$data = $this->json('GET', $url)->seeStatusCode(200)->decodeResponseJson();
8
cmac

同様の問題が発生し、組み込みの$ 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();
7
Daniel

ただ共有したいので、$this->json()でも同じように使用しています:

$response = $this->json('POST', '/order', $data)->response->getContent();

しかし、json応答を使用してデコードするためにもう1行追加しました。そうしないと、decodeResponseJson()が機能しませんでした。

$json = json_decode($response);
1
Shadman

より良い方法を見つけました:

$response = $this->json('POST', '/order', $data)->response->getOriginalContent();

このメソッドは、応答jsonを配列として返します。

0
Tobi