Test Laravel, obtenir le contenu JSON
dans le test unit de Laravel, je peux tester une API JSON comme ça:
$this->post('/user', ['name' => 'Sally'])
->seeJson([
'created' => true,
]);
Mais si je veux utiliser la réponse. Comment puis-je obtenir la réponse JSON (sous forme de tableau) en utilisant $this->post()
?
5 réponses
Actuellement en 5.3 cela fonctionne...
$content = $this->get('/v1/users/1')->response->getContent()
;
il casse la chaîne, cependant depuis response
renvoie la réponse et non le lanceur de test. Donc, vous devriez faire vos assertions enchaînables avant de chercher la réponse, comme ainsi...
$content = $this->get('/v1/users/1')->seeStatusCode(200)->response->getContent()
;
Bonne façon d'obtenir le contenu est:
$content = $this->get('/v1/users/1')->decodeResponseJson();
j'ai frappé un problème similaire et n'ai pas pu obtenir $this->getResponse()->getContent() travaillant avec la méthode built in $this->get (). J'ai essayé plusieurs variantes, sans succès.
au lieu de cela j'ai dû changer l'appel pour retourner la réponse http complète et obtenir le contenu hors de cela.
// Original (not working)
$content = $this->get('/v1/users/1')->getContent();
// New (working)
$content = $this->call('GET', '/v1/users/1')->getContent();
j'aime utiliser le json méthode lorsque l'on travaille avec json, au lieu d' ->get()
$data = $this->json('GET', $url)->seeStatusCode(200)->decodeResponseJson();
tout Simplement envie de partager, j'ai utilisé le même dans $this->json()
comme:
$response = $this->json('POST', '/order', $data)->response->getContent();
Mais j'ai ajouté une ligne supplémentaire à utiliser la réponse json et décoder sinon decodeResponseJson()
ne travaillait pas pour moi.
$json = json_decode($response);