Метод assertJsonValidationErrors
Метод assertJsonValidationErrors применяется к объекту ответа
в тестах Laravel и проверяет, что JSON-ответ содержит ошибки
валидации для указанных полей. Первым параметром передаётся
массив полей, для которых ожидаются ошибки, либо строка с именем
одного поля. Вторым параметром можно передать массив сообщений
об ошибках для проверки их соответствия.
Синтаксис
<?php
$response->assertJsonValidationErrors($fields, $messages = []);
?>
Пример
Давайте проверим, что при отправке невалидных данных
возвращаются ошибки для полей 'name' и 'email':
<?php
namespace Tests\Feature;
use Tests\TestCase;
use App\Models\User;
class UserControllerTest extends TestCase
{
public function testUserCreationFailsWithInvalidData()
{
$res = $this->postJson('/api/users', [
'name' => '',
'email' => 'invalid-email',
'password' => '123',
]);
$res->assertJsonValidationErrors(['name', 'email']);
}
}
?>
Пример
Проверим наличие ошибки для одного поля 'password'
с проверкой конкретного сообщения:
<?php
namespace Tests\Feature;
use Tests\TestCase;
class AuthControllerTest extends TestCase
{
public function testPasswordValidationFails()
{
$res = $this->postJson('/api/register', [
'name' => 'user',
'email' => 'user@example.com',
'password' => '123',
]);
$res->assertJsonValidationErrors([
'password' => 'The password must be at least 8 characters.'
]);
}
}
?>
Пример
Проверим несколько полей с указанием конкретных сообщений:
<?php
namespace Tests\Feature;
use Tests\TestCase;
class ProductControllerTest extends TestCase
{
public function testProductCreationValidationErrors()
{
$res = $this->postJson('/api/products', [
'title' => '',
'price' => -10,
'category' => 'invalid',
]);
$res->assertJsonValidationErrors([
'title' => 'The title field is required.',
'price' => 'The price must be at least 0.',
'category' => 'The selected category is invalid.',
]);
}
}
?>
Результат выполнения кода:
"JSON response contains validation errors for all specified fields"
Пример
Проверим структуру ошибок в JSON-ответе при множественных ошибках для одного поля:
<?php
namespace Tests\Feature;
use Tests\TestCase;
class PostControllerTest extends TestCase
{
public function testMultipleValidationErrorsForSingleField()
{
$res = $this->postJson('/api/posts', [
'content' => '',
'tags' => ['a', 'b', 'c', 'd', 'e', 'f'],
]);
$res->assertJsonValidationErrors([
'content',
'tags.0',
'tags.1',
]);
$res->assertJsonPath('errors.content.0', 'The content field is required.');
$res->assertJsonPath('errors.tags.0', 'The tags.0 field is required.');
}
}
?>
Смотрите также
-
метод
assertJson,
который проверяет наличие фрагмента JSON в ответе -
метод
assertJsonPath,
который проверяет значение по указанному пути в JSON -
метод
assertJsonStructure,
который проверяет структуру JSON-ответа -
метод
assertSessionHasErrors,
который проверяет ошибки в сессии для обычных запросов