phpunitを使用してSilexのテストを作成しようとしています。
クローラーオブジェクトを生成するクラスSymfony\Component \ BrowserKit\Clientがあります。
このオブジェクトは、クライアントの結果がxhtmlであることを想定していますが、テストしようとしているAPIはJSONを返し、クローラーはこれを許可しません。
JSONで動作するSilexまたはphpunitの組み込みクラスはありますか、それとも自分でロールする必要がありますか?
乾杯
jsonを扱うのに特別なことは何もありませんが、クローラーを使用せずにクライアントを使用できます。getResponse()
次のように、クライアントを呼び出して応答を取得するだけです。
$client = $this->createClient();
$client->request('GET', '/');
$response = $client->getResponse();
$data = json_decode($response->getContent(), true);
$this->assertSame(array('id' => 1, 'name' => 'igorw'), $data['users'][0]);
このロジックをテストケースのヘルパーメソッドに移動して使用することをお勧めします。
Symfony 2ブラウザでJSONリクエストを送信する場合-の代わりに、およびの代わりにキットをHTTP_ACCEPT
使用ACCEPT
しHTTP_CONTENT_TYPE
ますCONTENT_TYPE
。POST
いくつかのリクエストを送信する例を次に示し$data
ます。
$client->request(
$method = 'POST',
$uri,
$parameters = array(),
$files = array(),
$server = array(
'HTTP_CONTENT_TYPE' => 'application/x-www-form-urlencoded; charset=UTF-8', // for sending urlencoded data
//or 'HTTP_CONTENT_TYPE' => 'application/json', // for sending JSON data
'HTTP_ACCEPT' => 'application/json',
),
$content = $data,
$changeHistory = true
);
$response = $client->getResponse();
$response_data = json_decode($response->getContent(), true);