Метод assertJsonCount
Метод assertJsonCount применяется в тестах Laravel
для проверки количества элементов в JSON-ответе.
Первый параметр - ожидаемое количество элементов,
второй - ключ проверяемого массива в JSON-ответе.
Если ключ не указан, метод проверяет корневой массив.
При несоответствии тест выбрасывает исключение.
Синтаксис
<?php
$this->assertJsonCount($expectedCount, $key = null);
?>
Параметры метода:
-
$expectedCount- ожидаемое количество элементов в массиве -
$key(необязательный) - ключ в JSON-ответе, который содержит массив для проверки
Пример
Проверим, что JSON-ответ содержит ровно три элемента
в массиве 'data':
<?php
namespace Tests\Feature;
use Tests\TestCase;
use App\Models\User;
class UserTest extends TestCase
{
public function test_users_list_contains_three_users()
{
User::factory()->count(3)->create();
$res = $this->getJson('/api/users');
$res->assertJsonCount(3, 'data');
}
}
?>
Результат выполнения теста:
"OK (1 test, 1 assertion)"
Пример
Проверим, что корневой массив содержит ровно пять элементов:
<?php
namespace Tests\Feature;
use Tests\TestCase;
use App\Models\Post;
class PostTest extends TestCase
{
public function test_root_array_contains_five_posts()
{
Post::factory()->count(5)->create();
$res = $this->getJson('/api/posts');
$res->assertJsonCount(5);
}
}
?>
Результат выполнения теста:
"OK (1 test, 1 assertion)"
Пример
Проверим количество элементов во вложенном массиве с использованием точечной нотации:
<?php
namespace Tests\Feature;
use Tests\TestCase;
use App\Models\Comment;
class CommentTest extends TestCase
{
public function test_post_has_two_comments()
{
$post = Post::factory()->create();
Comment::factory()->count(2)->create([
'post_id' => $post->id
]);
$res = $this->getJson('/api/posts/' . $post->id);
$res->assertJsonCount(2, 'comments.data');
}
}
?>
Результат выполнения кода:
"OK (1 test, 1 assertion)"
Пример
Пример с пустым массивом и проверкой отсутствия элементов:
<?php
namespace Tests\Feature;
use Tests\TestCase;
use App\Models\Category;
class CategoryTest extends TestCase
{
public function test_empty_categories_list()
{
$res = $this->getJson('/api/categories');
$res->assertJsonCount(0, 'data');
}
}
?>
Результат выполнения теста:
"OK (1 test, 1 assertion)"
Смотрите также
-
метод
assertJson,
который проверяет наличие фрагмента в JSON-ответе -
метод
assertJsonPath,
который проверяет значение по указанному пути в JSON -
метод
assertJsonStructure,
который проверяет структуру JSON-ответа -
метод
assertExactJson,
который проверяет точное соответствие JSON-ответа