2012-09-18 86 views
5

我想爲使用phpunit的Silex編寫一些測試。Silex&phpunit JSON響應

我有一個類Symfony \ Component \ BrowserKit \ Client,它生成一個Crawler對象。

此對象預計客戶端的結果爲xhtml,但是我試圖測試的api返回JSON,並且抓取工具不允許執行此操作。

Silex或phpunit中是否有內置的類可以與JSON一起使用,還是必須自行推出?

乾杯

回答

22

沒有什麼特殊的處理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]); 

我建議你提出這個邏輯插入測試用例一個輔助方法和使用。

+0

精湛,非常感謝你 –

0

對於在Symfony 2 Browser-Kit中發送JSON請求,使用HTTP_ACCEPT而不是ACCEPTHTTP_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);