Метод assertJson
Метод assertJson применяется к HTTP-тестовому ответу
и проверяет, что JSON-ответ содержит указанные ключи и значения.
Метод принимает один параметр - массив с проверяемыми данными.
При этом порядок элементов не важен, а фактические данные могут
содержать дополнительные поля, не указанные в проверке.
Если проверка не проходит, тест считается неудачным.
Синтаксис
<?php
$this->get($uri)->assertJson($data);
?>
Пример
Давайте проверим, что GET-запрос к эндпоинту возвращает JSON с указанными данными:
<?php
namespace Tests\Feature;
use Tests\TestCase;
class UserTest extends TestCase
{
public function test_get_user_returns_json()
{
$res = $this->get('/api/user/1');
$res->assertJson([
'id' => 1,
'name' => 'John Doe',
'email' => 'john@example.com'
]);
}
}
?>
Если ответ содержит все указанные ключи с соответствующими значениями, тест будет пройден успешно.
Пример
Метод assertJson проверяет только наличие указанных данных,
игнорируя дополнительные поля. Проверим это на примере:
<?php
namespace Tests\Feature;
use Tests\TestCase;
class PostTest extends TestCase
{
public function test_post_contains_required_fields()
{
$res = $this->get('/api/posts/5');
$res->assertJson([
'title' => 'My first post',
'author_id' => 3
]);
}
}
?>
Тест будет успешным, даже если JSON содержит дополнительные поля,
например 'content' или 'created_at'.
Пример
Проверим наличие вложенных данных в структуре JSON:
<?php
namespace Tests\Feature;
use Tests\TestCase;
class OrderTest extends TestCase
{
public function test_order_has_user_data()
{
$res = $this->get('/api/orders/10');
$res->assertJson([
'id' => 10,
'user' => [
'id' => 5,
'name' => 'Jane Smith'
]
]);
}
}
?>
Пример
Метод assertJson можно использовать для проверки
списка элементов в JSON-ответе:
<?php
namespace Tests\Feature;
use Tests\TestCase;
class ProductsTest extends TestCase
{
public function test_products_list_has_first_item()
{
$res = $this->get('/api/products');
$res->assertJson([
[
'id' => 1,
'name' => 'Laptop'
]
]);
}
}
?>
В этом случае проверяется, что первый элемент массива содержит указанные поля.
Смотрите также
-
метод
assertExactJson,
который требует полного совпадения JSON-ответа -
метод
assertJsonPath,
который проверяет значение по указанному пути -
метод
assertJsonFragment,
который проверяет наличие фрагмента в JSON-ответе -
метод
assertJsonStructure,
который проверяет структуру JSON-ответа