我想爲使用phpunit的Silex編寫一些測試。Silex&phpunit JSON響應
我有一個類Symfony \ Component \ BrowserKit \ Client,它生成一個Crawler對象。
此對象預計客戶端的結果爲xhtml,但是我試圖測試的api返回JSON,並且抓取工具不允許執行此操作。
Silex或phpunit中是否有內置的類可以與JSON一起使用,還是必須自行推出?
乾杯
我想爲使用phpunit的Silex編寫一些測試。Silex&phpunit JSON響應
我有一個類Symfony \ Component \ BrowserKit \ Client,它生成一個Crawler對象。
此對象預計客戶端的結果爲xhtml,但是我試圖測試的api返回JSON,並且抓取工具不允許執行此操作。
Silex或phpunit中是否有內置的類可以與JSON一起使用,還是必須自行推出?
乾杯
沒有什麼特殊的處理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 Browser-Kit中發送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);
精湛,非常感謝你 –