2012-09-18 28 views
5

Estoy tratando de escribir algunas pruebas para Silex utilizando PHPUnit.Silex y PHPUnit respuesta JSON

Tengo un Symfony \ Component \ BrowserKit \ Client clase que genera un objeto de oruga.

Este objeto espera que los resultados del cliente para ser XHTML sin embargo mi API que estoy tratando de prueba devuelve JSON y el rastreador no permite esto.

¿Existe un sistema incorporado en la clase, ya sea en Silex o PHPUnit que trabajará con JSON o voy a tener que rodar mi propia?

Saludos

Respuesta

22

No hay nada especial para hacer frente a JSON, pero se puede utilizar el cliente sin necesidad de utilizar el rastreador. Simplemente llame getResponse() en el cliente para obtener la respuesta, así:

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

le sugiero que se mueve esta lógica en un método de ayuda en el caso de prueba y utilizar eso.

+0

Excelente, muchas gracias –

0

Para el envío de una solicitud JSON en Symfony 2 Browser-Kit uso HTTP_ACCEPT en lugar de ACCEPT y HTTP_CONTENT_TYPE en lugar de CONTENT_TYPE. Este es un ejemplo para el envío de la solicitud POST con un poco de $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);