РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1215 of 1392 menu

Метод assertJsonStructure

Метод assertJsonStructure применяется к экземпляру класса Illuminate\Testing\TestResponse, который возвращается при выполнении HTTP-запросов в тестах. Этот метод проверяет, соответствует ли структура JSON-ответа заданному шаблону. Первым параметром передаётся массив ожидаемых ключей или вложенная структура. Если проверка не проходит, тест завершается с ошибкой.

Синтаксис

<?php $response->assertJsonStructure($structure); ?>

Метод принимает массив $structure, где ключи - это ожидаемые поля в JSON-ответе. Для проверки вложенных структур используются вложенные массивы.

Пример

Предположим, у нас есть контроллер, который возвращает информацию о пользователе в формате JSON. Создадим тест для проверки структуры этого ответа:

<?php namespace Tests\Feature; use Tests\TestCase; use App\Models\User; class UserTest extends TestCase { public function test_user_response_structure() { $user = User::factory()->create(); $res = $this->getJson("/api/users/{$user->id}"); $res->assertJsonStructure([ 'id', 'name', 'email', 'created_at', 'updated_at' ]); } } ?>

Результат выполнения кода:

"Test passed successfully"

Пример

Проверим структуру JSON-ответа с вложенными объектами. Пусть наш API возвращает данные о пользователе и его постах:

<?php namespace Tests\Feature; use Tests\TestCase; use App\Models\User; class UserPostsTest extends TestCase { public function test_user_with_posts_response() { $user = User::factory()->hasPosts(3)->create(); $res = $this->getJson("/api/users/{$user->id}/posts"); $res->assertJsonStructure([ 'id', 'name', 'email', 'posts' => [ '*' => [ 'id', 'title', 'content', 'created_at' ] ] ]); } } ?>

Результат выполнения кода:

"Test passed successfully"

Пример

Проверим структуру ответа с опциональными полями. Используем синтаксис 'field?' для указания, что поле может отсутствовать в ответе:

<?php namespace Tests\Feature; use Tests\TestCase; use App\Models\Article; class OptionalFieldsTest extends TestCase { public function test_response_with_optional_fields() { $article = Article::factory()->create([ 'deleted_at' => null ]); $res = $this->getJson("/api/articles/{$article->id}"); $res->assertJsonStructure([ 'id', 'title', 'content', 'deleted_at?' ]); } } ?>

Результат выполнения кода:

"Test passed successfully"

Пример

Проверим структуру ответа со смешанными типами данных. Метод assertJsonStructure также поддерживает проверку типов с использованием специальных маркеров:

<?php namespace Tests\Feature; use Tests\TestCase; use App\Models\Order; class MixedTypesTest extends TestCase { public function test_response_mixed_types() { $order = Order::factory()->create([ 'total' => 100.50, 'is_paid' => true ]); $res = $this->getJson("/api/orders/{$order->id}"); $res->assertJsonStructure([ 'id' => 'integer', 'user_id' => 'integer', 'total' => 'numeric', 'is_paid' => 'boolean', 'description' => 'string|null', 'created_at' => 'string' ]); } } ?>

Результат выполнения кода:

"Test passed successfully"

Смотрите также

  • метод assertJson,
    который проверяет наличие фрагмента JSON в ответе
  • метод assertJsonPath,
    который проверяет значение по пути в JSON
  • метод assertJsonCount,
    который проверяет количество элементов в массиве JSON
  • метод assertExactJson,
    который проверяет полное совпадение JSON
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить