Тестирование Laravel, получить контент JSON
В Laravel unit test я могу проверить API JSON следующим образом:
$this->post('/user', ['name' => 'Sally'])
->seeJson([
'created' => true,
]);
Но что, если я хочу использовать ответ. Как я могу получить ответ JSON (как массив) с помощью $this->post()
?
Ответы
Ответ 1
В настоящее время в 5.3 это работает...
$content = $this->get('/v1/users/1')->response->getContent()
;
Он разрушает цепочку, однако, поскольку response
возвращает ответ, а не тестовый бегун. Таким образом, вы должны сделать свои привязанные утверждения до получения ответа, например...
$content = $this->get('/v1/users/1')->seeStatusCode(200)->response->getContent()
;
Ответ 2
Правильный способ получить контент:
$content = $this->get('/v1/users/1')->decodeResponseJson();
Ответ 3
Мне нравится использовать json-метод при работе с json, а не → get()
$data = $this->json('GET', $url)->seeStatusCode(200)->decodeResponseJson();
Ответ 4
Я столкнулся с подобной проблемой и не смог получить $this- > getResponse() → getContent(), работая со встроенным методом $this- > get(). Я пробовал несколько вариантов без успеха.
Вместо этого мне пришлось изменить вызов, чтобы вернуть полный ответ HTTP и получить содержимое из этого.
// Original (not working)
$content = $this->get('/v1/users/1')->getContent();
// New (working)
$content = $this->call('GET', '/v1/users/1')->getContent();
Ответ 5
Просто хочу поделиться, я использовал то же самое в $this->json()
как:
$response = $this->json('POST', '/order', $data)->response->getContent();
Но я добавил еще одну строку, чтобы использовать ответ json и декодировать, иначе decodeResponseJson()
не работал для меня.
$json = json_decode($response);
Ответ 6
Простой способ:
$this->getJson('api/threads')->content()
Ответ 7
Нашли лучший способ:
$response = $this->json('POST', '/order', $data)->response->getOriginalContent();
Этот метод возвращает ответ json в виде массива.