Метод assertUnprocessable
Метод assertUnprocessable применяется к объекту ответа
в тестах Laravel и проверяет, что HTTP-ответ имеет статус 422
(Unprocessable Entity). Этот метод удобно использовать для
проверки ошибок валидации данных, когда сервер не может
обработать запрос из-за некорректных данных. В отличие от
ручной проверки статуса, метод автоматически проверяет наличие
ошибок валидации в структуре ответа.
Синтаксис
<?php
$response->assertUnprocessable();
?>
В качестве параметров метод ничего не принимает, но при неудачной проверке выбрасывает исключение и помечает тест как проваленный. Метод проверяет, что статус ответа равен 422 и что в ответе присутствует ключ 'errors' с ошибками валидации.
Пример
Давайте проверим, что при отправке запроса без обязательного поля 'title' сервер возвращает статус 422:
<?php
namespace Tests\Feature;
use Tests\TestCase;
class ArticleControllerTest extends TestCase
{
public function test_validation_fails_without_title()
{
$data = [
'content' => 'article content'
];
$res = $this->postJson('/api/articles', $data);
$res->assertUnprocessable();
}
}
?>
Результат выполнения кода:
"Test passed"
Пример
Проверим валидацию нескольких полей одновременно при создании пользователя:
<?php
namespace Tests\Feature;
use Tests\TestCase;
class UserControllerTest extends TestCase
{
public function test_validation_fails_for_multiple_fields()
{
$data = [
'email' => 'invalid-email',
'password' => '123'
];
$res = $this->postJson('/api/users', $data);
$res->assertUnprocessable();
}
}
?>
Результат выполнения кода:
"Test passed"
Пример
Комбинируем assertUnprocessable с проверкой конкретных
ошибок валидации:
<?php
namespace Tests\Feature;
use Tests\TestCase;
class PostControllerTest extends TestCase
{
public function test_validation_errors_are_correct()
{
$data = [
'title' => '',
'body' => 'short'
];
$res = $this->postJson('/api/posts', $data);
$res->assertUnprocessable();
$res->assertJsonValidationErrors(['title', 'body']);
}
}
?>
Результат выполнения кода:
"Test passed"
Смотрите также
-
метод
assertStatus,
который проверяет конкретный HTTP-код ответа -
метод
assertJsonValidationErrors,
который проверяет наличие ошибок валидации в JSON-ответе -
метод
assertValid,
который проверяет успешную валидацию данных -
метод
postJson,
который отправляет JSON-запрос и возвращает ответ