APIに対してWebテストケースを実行するにはどうすればよいですか?機能テストに関するデフォルトのガイドでは、次のコマンドしか提供されていません。
$client = static::createClient();
$crawler = $client->request('GET', '/some-url');
CrawlerクラスはDOMクローラーです。 FrameworkBundle\Clientクラスの参照を確認しましたが、生のResponseを返すリクエストを作成できるメソッドが見つかりませんでした。少なくともそうすれば、出力をjson_decodeして、テストを実行できるようになります。
これを達成するために何を使用できますか?
$client->request(...)
呼び出しを実行した後、$client->getResponse()
を実行してサーバー応答を取得できます。
次に、ステータスコードをアサートし、その内容を確認できます。次に例を示します。
$client->request('GET', '/my-url');
$response = $client->getResponse();
$this->assertSame(200, $response->getStatusCode());
$responseData = json_decode($response->getContent(), true);
// etc...
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
文字列の両方の正規化を担当することに注意してください。
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);