web-dev-qa-db-fra.com

Laravel testing, obtenez du contenu JSON

Dans le test unitaire de Laravel, je peux tester une API JSON comme celle-ci:

$this->post('/user', ['name' => 'Sally'])
    ->seeJson([
        'created' => true,
    ]);

Mais que faire si je veux utiliser la réponse. Comment obtenir la réponse JSON (sous forme de tableau) à l'aide de $this->post()?

24
rap-2-h

Actuellement en 5.3 cela fonctionne ...

$content = $this->get('/v1/users/1')->response->getContent();

Cela casse la chaîne, cependant, puisque response renvoie la réponse et non le programme d'exécution. Donc, vous devriez faire vos assertions chaînables avant d'aller chercher la réponse, comme ça ...

$content = $this->get('/v1/users/1')->seeStatusCode(200)->response->getContent();

22
Mike McLin

Le moyen approprié pour obtenir le contenu est:

$content = $this->get('/v1/users/1')->decodeResponseJson();
27
Jan Tlapák

Je rencontre un problème similaire et je ne peux pas utiliser $ this-> getResponse () -> getContent () avec la méthode intégrée $ this-> get () J'ai essayé plusieurs variantes sans succès.

Au lieu de cela, j'ai dû modifier l'appel pour renvoyer la réponse http complète et en extraire le contenu.

// Original (not working)
$content = $this->get('/v1/users/1')->getContent();

// New (working)
$content = $this->call('GET', '/v1/users/1')->getContent();
6
Daniel

J'aime utiliser la méthode json lorsque json est utilisé, au lieu de -> get ()

$data = $this->json('GET', $url)->seeStatusCode(200)->decodeResponseJson();
4
cmac

Je veux juste partager, j'ai utilisé la même chose dans $this->json() comme:

$response = $this->json('POST', '/order', $data)->response->getContent();

Mais j'ai ajouté une ligne supplémentaire pour utiliser la réponse json et décoder sinon decodeResponseJson() ne fonctionnait pas pour moi.

$json = json_decode($response);
1
Shadman

Trouvé un meilleur moyen:

$response = $this->json('POST', '/order', $data)->response->getOriginalContent();

Cette méthode retourne la réponse sous forme de tableau.

0
Tobi