2012-09-18 5 views
5

J'essaie d'écrire des tests pour Silex en utilisant phpunit.Silex & phpunit Réponse JSON

J'ai une classe Symfony \ Component \ BrowserKit \ Client qui génère un objet Crawler.

Cet objet s'attend à ce que les résultats du client soient xhtml mais mon API que j'essaye de tester retourne JSON et le robot ne le permet pas.

Y a-t-il une classe intégrée dans Silex ou phpunit qui fonctionnera avec JSON ou devrais-je lancer la mienne?

Vive

Répondre

22

Il n'y a rien de spécial pour traiter JSON, mais vous pouvez utiliser le client sans utiliser le robot. Il suffit d'appeler getResponse() sur le client pour obtenir la réponse, comme ceci:

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

Je vous suggère de déplacer cette logique dans une méthode d'assistance sur le cas de test et l'utiliser.

+0

Superbe, merci beaucoup –

0

Pour envoyer une demande JSON dans Symfony 2 utiliser le navigateur-Kit HTTP_ACCEPT au lieu de ACCEPT et HTTP_CONTENT_TYPE au lieu de CONTENT_TYPE. Voici un exemple pour l'envoi POST demande avec une $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);