Я тоже часто использую seeJsonStructure()
, поэтому я собрал небольшой заменитель, чтобы поместить его в свой собственный TestCase
. Надеюсь, это кому-то поможет, или кто-то может посоветовать мне лучшее решение:
Добавлено в мой TestCase
:
public function seeJsonStructure(TestResponse $response = null, array $structure = null, $responseData = null)
{
if ($response && !$responseData) {
$responseData = $response->decodeResponseJson();
}
if (is_null($structure)) {
return $response->assertJson($responseData);
}
foreach ($structure as $key => $value) {
if (is_array($value) && $key === '*') {
$this->assertInternalType('array', $responseData);
foreach ($responseData as $responseDataItem) {
$this->seeJsonStructure(null, $structure['*'], $responseDataItem);
}
} elseif (is_array($value)) {
$this->assertArrayHasKey($key, $responseData);
$this->seeJsonStructure(null, $structure[$key], $responseData[$key]);
} else {
$this->assertArrayHasKey($value, $responseData);
}
}
return $this;
}
Затем мне пришлось обновить свои тесты, поэтому я передаю ответ в качестве первого аргумента при вызове этого метода. Пример для SomeTest
:
$response = $this->json('POST', $url, [
'id' => $user->id
]);
$this->seeJsonStructure($response, [
'id', 'first_name', 'last_name', 'email'
]);
Первоначальный метод Laravel был следующим: //github.com/laravel/browser-kit-testing/blob/85f9a14a63bf5a287740002fcbc4352587f8a113/src/Concerns/MakesHttpRequests.php#L348
person
Dustin
schedule
02.02.2017
assertJson
или реплицировать код дляseeJsonStructure
. Чтобы было ясно, это никогда не было в чертеTestResponse
, а скорее в чертеMakesHttpRequests
. - person bishop   schedule 26.01.2017