Ответ Silex и phpunit в формате JSON

Я пытаюсь написать несколько тестов для Silex, используя phpunit.

У меня есть класс Symfony\Component\BrowserKit\Client, который генерирует объект Crawler.

Этот объект ожидает, что результаты клиента будут xhtml, однако мой API, который я пытаюсь протестировать, возвращает JSON, и сканер не разрешает этого.

Есть ли встроенный класс в Silex или phpunit, который будет работать с JSON, или мне придется свернуть свой собственный?

Ваше здоровье


person Lee    schedule 18.09.2012    source источник


Ответы (2)


В работе с 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]);

Я предлагаю вам перенести эту логику во вспомогательный метод в тестовом примере и использовать его.

person igorw    schedule 18.09.2012

Для отправки запроса JSON в Symfony 2 Browser-Kit используйте 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);
person Krzysztof Przygoda    schedule 20.08.2016