web-dev-qa-db-ja.com

symfonyウェブテストケースJSON

APIに対してWebテストケースを実行するにはどうすればよいですか?機能テストに関するデフォルトのガイドでは、次のコマンドしか提供されていません。

$client = static::createClient();
$crawler = $client->request('GET', '/some-url');

CrawlerクラスはDOMクローラーです。 FrameworkBundle\Clientクラスの参照を確認しましたが、生のResponseを返すリクエストを作成できるメソッドが見つかりませんでした。少なくともそうすれば、出力をjson_decodeして、テストを実行できるようになります。

これを達成するために何を使用できますか?

15
Gasim

$client->request(...)呼び出しを実行した後、$client->getResponse()を実行してサーバー応答を取得できます。

次に、ステータスコードをアサートし、その内容を確認できます。次に例を示します。

$client->request('GET', '/my-url');
$response = $client->getResponse();
$this->assertSame(200, $response->getStatusCode());
$responseData = json_decode($response->getContent(), true);
// etc...
20
Igor Pantović

willdurand/rest-extra-bundle バンドルは JSONをテストするための追加のヘルパー を提供します。同等性をテストするために、この目的のための組み込みのアサーションがすでにあります。

use Bazinga\Bundle\RestExtraBundle\Test\WebTestCase as BazingaWebTestCase;

// ...

$client->request('GET', '/my-url');
$response = $client->getResponse();
$this->assertJsonResponse($response, Response::HTTP_OK);
$this->assertJsonStringEqualsJsonString($expectedJson, $response);

assertJsonStringEqualsJsonStringアサーションは、$expectedJson文字列と$response文字列の両方の正規化を担当することに注意してください。

3
COil

this commit 以降、PHPUnit\Framework\Assert :: assertJson()メソッドがあります。応答の「Content-Type」をテストすることもできます。

$response = $client->getResponse();
$this->assertTrue($response->headers->contains('Content-Type', 'application/json'));
$this->assertJson($response->getContent());
$responseData = json_decode($response->getContent(), true);
1
Arno