2012-09-18 15 views
5

Sto provando a scrivere alcuni test per Silex usando phpunit.Silex & phpunit Risposta JSON

Ho una classe Symfony \ Component \ BrowserKit \ Client che genera un oggetto Crawler.

Questo oggetto si aspetta che i risultati del client siano xhtml tuttavia la mia API che sto cercando di test restituisce JSON e il crawler non lo consente.

Esiste una classe integrata in Silex o phpunit che funzionerà con JSON o devo eseguire il rollover da solo?

Acclamazioni

risposta

22

Non c'è niente di speciale per trattare con JSON, ma è possibile utilizzare il client senza utilizzare crawler. Basta chiamare getResponse() sul client per ottenere la risposta, in questo modo:

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

ti suggerisco di spostare questa logica in un metodo di supporto sul banco di prova e l'uso che.

+0

Superb, vi ringrazio molto –

0

per inviare una richiesta di JSON in Symfony 2 uso Browser-Kit HTTP_ACCEPT invece di ACCEPT e HTTP_CONTENT_TYPE invece di CONTENT_TYPE. Ecco un esempio per l'invio di POST richiesta con una certa $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);