Метод assertExactJson
Метод assertExactJson применяется к объекту ответа
в тестах Laravel и выполняет строгую проверку JSON-структуры.
Первым параметром передаётся массив ожидаемых данных,
который должен полностью совпадать с JSON-ответом.
При этом порядок ключей не важен, но все элементы должны
присутствовать в точности, без дополнительных полей.
Если данные не совпадают, тест завершается с ошибкой.
Синтаксис
<?php
$response->assertExactJson(array $data);
?>
Пример
Проверим, что эндпоинт возвращает список статей в точном соответствии с ожидаемой структурой:
<?php
namespace Tests\Feature;
use Tests\TestCase;
use App\Models\Article;
class ArticleTest extends TestCase
{
public function test_exact_json_response()
{
$article = Article::factory()->create([
'id' => 1,
'title' => 'article',
'content' => 'text',
'status' => 'published'
]);
$response = $this->getJson('/api/articles/1');
$response->assertExactJson([
'id' => 1,
'title' => 'article',
'content' => 'text',
'status' => 'published'
]);
}
}
?>
Результат выполнения кода:
"OK"
Пример
Сравним, как assertExactJson отличается от
assertJson. При использовании assertJson
допускаются дополнительные поля в ответе:
<?php
namespace Tests\Feature;
use Tests\TestCase;
use App\Models\Article;
class ArticleTest extends TestCase
{
public function test_json_with_extra_fields()
{
$article = Article::factory()->create([
'id' => 1,
'title' => 'article',
'content' => 'text',
'status' => 'published',
'created_at' => '2026-01-01 12:00:00',
'updated_at' => '2026-01-01 12:00:00'
]);
$response = $this->getJson('/api/articles/1');
// Это пройдёт успешно
$response->assertJson([
'id' => 1,
'title' => 'article'
]);
// А это вызовет ошибку, так как в ответе есть дополнительные поля
$response->assertExactJson([
'id' => 1,
'title' => 'article'
]);
}
}
?>
Результат выполнения кода:
"Failed asserting that the JSON response has the exact structure"
Пример
Проверим вложенные структуры данных в JSON-ответе:
<?php
namespace Tests\Feature;
use Tests\TestCase;
use App\Models\User;
use App\Models\Post;
class UserTest extends TestCase
{
public function test_exact_json_with_nested_data()
{
$user = User::factory()->create([
'id' => 1,
'name' => 'user',
'email' => 'user@example.com'
]);
$post = Post::factory()->create([
'id' => 5,
'user_id' => 1,
'title' => 'post',
'content' => 'text'
]);
$response = $this->getJson('/api/users/1');
$response->assertExactJson([
'id' => 1,
'name' => 'user',
'email' => 'user@example.com',
'posts' => [
[
'id' => 5,
'user_id' => 1,
'title' => 'post',
'content' => 'text'
]
]
]);
}
}
?>
Результат выполнения кода:
"OK"
Смотрите также
-
метод
assertJson,
который проверяет наличие фрагмента в JSON-ответе -
метод
assertJsonPath,
который проверяет значение по указанному пути в JSON -
метод
assertJsonStructure,
который проверяет структуру JSON-ответа -
метод
getJson,
который выполняет GET-запрос и возвращает JSON-ответ