wake-up-neo.com

Laravel-Test, JSON-Inhalt abrufen

Im Laravel-Unit-Test kann ich eine JSON-API folgendermaßen testen:

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

Aber was ist, wenn ich die Antwort verwenden möchte. Wie kann ich die JSON-Antwort (als Array) mit $this->post() erhalten?

24
rap-2-h

Derzeit in 5.3 funktioniert dies ...

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

Dies unterbricht jedoch die Kette, da response die Antwort und nicht den Testläufer zurückgibt. Sie sollten also Ihre verkettbaren Aussagen treffen, bevor Sie die Antwort abrufen, wie folgt ...

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

29
Mike McLin

Der richtige Weg, um den Inhalt zu erhalten, ist:

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

Ich traf ein ähnliches Problem und konnte $ this-> getResponse () -> getContent () nicht mit der integrierten $ this-> get () -Methode arbeiten. Ich habe mehrere Variationen ohne Erfolg ausprobiert.

Stattdessen musste ich den Aufruf ändern, um die vollständige http-Antwort zurückzugeben und den Inhalt daraus zu erhalten.

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

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

Ich benutze gerne die json-Methode, wenn ich mit json arbeite, statt

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

Ich möchte nur teilen, ich habe das gleiche in $this->json() verwendet:

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

Aber ich habe eine weitere Zeile hinzugefügt, um die Json-Antwort zu verwenden und zu dekodieren, ansonsten funktionierte decodeResponseJson() nicht für mich.

$json = json_decode($response);
1
Shadman

Einen besseren Weg gefunden:

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

Diese Methode gibt die Antwort json als Array zurück.

0
Tobi