5

我正在尝试使用 phpunit 为 Silex 编写一些测试。

我有一个生成 Crawler 对象的类 Symfony\Component\BrowserKit\Client。

该对象期望客户端的结果是 xhtml,但是我尝试测试的我的 api 返回 JSON,并且爬虫不允许这样做。

Silex 或 phpunit 中是否有内置类可以与 JSON 一起使用,还是我必须自己动手?

干杯

4

2 回答 2

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

我建议您将此逻辑移动到测试用例的辅助方法中并使用它。

于 2012-09-18T19:53:05.520 回答
0

为了在 Symfony 2 Browser-Kit 中发送 JSON 请求,使用HTTP_ACCEPT代替ACCEPTHTTP_CONTENT_TYPE代替CONTENT_TYPE. POST以下是使用 some 发送请求的示例$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);
于 2016-08-20T10:40:04.450 回答