2012-09-18 13 views
5

私はphpunitを使ってSilexのテストを書こうとしています。Silex&phpunit JSONレスポンス

私はクラス「Symfony \ Component \ BrowserKit \ Client」を使用して、クローラオブジェクトを生成しています。

このオブジェクトは、クライアントの結果がxhtmlであることを期待していますが、私がテストしようとしているapiはJSONを返し、クローラはこれを許可しません。

JSONで動作するSilexまたはphpunitに組み込みクラスがありますか、自分でロールバックする必要がありますか?

乾杯

答えて

22

ありJSONに対処するための特別なことは何もありませんが、あなたは、クローラを使用せずにクライアントを使用することができます。

$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]); 

私はあなたがテストケースにヘルパーメソッドにこのロジックを移動して、それを使用することをお勧め:単にこのように、応答を取得するには、クライアント上でgetResponse()を呼び出します。 symfonyの2ブラウザキットの使用HTTP_ACCEPTの代わりに、ACCEPT、代わりにCONTENT_TYPEHTTP_CONTENT_TYPEでJSONリクエストを送信するために

+0

優れ:ここではいくつかの$dataPOSTリクエストを送信するための一例です –

0

。どうもありがとうございました、

$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);