2015-08-25 15 views
15

w teście jednostkowej laravel, można przetestować API JSON tak:laravel badania, uzyskać zawartość JSON

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

ale co jeśli chcę użyć odpowiedź. Jak mogę uzyskać odpowiedź JSON (jako tablicę) przy użyciu $this->post()?

+2

'$ this-> getResponse() -> getContent()' może załatwić sprawę. – ceejayoz

Odpowiedz

17

Obecnie w 5.3 to działa ...

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

Łamie łańcuch, jednak od response zwraca odpowiedź, a nie biegacz testowy. Powinieneś więc zrobić swoje łańcuchowe twierdzenia przed odebraniem odpowiedzi, tak jak ...

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

4

Uderzyłem podobny problem i nie mogłem uzyskać $ this-> getResponse() -> getContent() działa z wbudowaną metodą $ this-> get(). Próbowałem kilku wariacji bez powodzenia.

Zamiast tego musiałem zmienić połączenie, aby zwrócić pełną odpowiedź http i pobrać z tego zawartość.

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

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

W przypadku testowym nie ma metody "getContent()". Metoda 'get()' jest płynnym helperem, który zwraca test case (dzięki czemu możesz łączyć wiele asercji). Przypadek testowy ma właściwość 'response', która zwróci obiekt odpowiedzi (zamiast przypadku testowego). Następnie możesz wywołać 'getContent()' w tym obiekcie odpowiedzi. Zobacz moją odpowiedź, aby uzyskać więcej informacji. –

9

Prawidłowe sposób, aby uzyskać zawartość wynosi:

$content = $this->get('/v1/users/1')->decodeResponseJson(); 
+1

To powinna być właściwa odpowiedź. –

+1

Zgadzam się. Działa w 5.4. –

4

Chciałbym użyć metody json podczas pracy z JSON, zamiast -> get()

$data = $this->json('GET', $url)->seeStatusCode(200)->decodeResponseJson(); 
Powiązane problemy