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()?

20
demandé sur rap-2-h 2015-08-25 18:51:20

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();

20
répondu Mike McLin 2016-09-14 03:39:23

Bonne façon d'obtenir le contenu est:

$content = $this->get('/v1/users/1')->decodeResponseJson();
21
répondu Jan Tlapák 2016-06-23 08:17:01

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();
5
répondu Daniel 2016-09-14 07:33:43

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();
5
répondu cmac 2016-11-21 16:57:46

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);
0
répondu Shadman 2018-09-22 07:12:35