Метод assertInvalid
Метод assertInvalid применяется к HTTP-ответу
в тестах Laravel и проверяет, что валидация запроса
не пройдена для указанных полей. Он полезен для
тестирования контроллеров, которые выполняют
валидацию входящих данных. Метод принимает массив
полей с ожидаемыми ошибками или просто список полей,
для которых проверяется наличие ошибок валидации.
Синтаксис
<?php
$this->post($url, $data)->assertInvalid($fields);
?>
Метод возвращает экземпляр TestResponse,
позволяя строить цепочки вызовов. Параметр $fields
может быть массивом с ключами - именами полей,
и значениями - ожидаемыми сообщениями об ошибках,
либо простым массивом полей для проверки наличия
любых ошибок.
Пример
Давайте протестируем запрос на создание статьи с пустым заголовком:
<?php
namespace Tests\Feature;
use Tests\TestCase;
class ArticleTest extends TestCase
{
public function test_article_creation_fails_with_empty_title()
{
$data = [
'title' => '',
'content' => 'Some content',
];
$res = $this->post('/articles', $data);
$res->assertInvalid(['title']);
}
}
?>
Пример
Давайте проверим ошибки для нескольких полей сразу:
<?php
namespace Tests\Feature;
use Tests\TestCase;
class ArticleTest extends TestCase
{
public function test_article_creation_fails_with_empty_fields()
{
$data = [
'title' => '',
'content' => '',
];
$res = $this->post('/articles', $data);
$res->assertInvalid(['title', 'content']);
}
}
?>
Пример
Давайте проверим конкретные сообщения об ошибках для поля email:
<?php
namespace Tests\Feature;
use Tests\TestCase;
class UserTest extends TestCase
{
public function test_user_creation_fails_with_invalid_email()
{
$data = [
'name' => 'John',
'email' => 'not-email',
'password' => 'password',
];
$res = $this->post('/users', $data);
$res->assertInvalid([
'email' => 'The email must be a valid email address.',
]);
}
}
?>
Пример
Давайте проверим, что сообщение об ошибке содержит определённую подстроку:
<?php
namespace Tests\Feature;
use Tests\TestCase;
class ProductTest extends TestCase
{
public function test_product_creation_fails_with_short_name()
{
$data = [
'name' => 'A',
'price' => 100,
];
$res = $this->post('/products', $data);
$res->assertInvalid([
'name' => 'must be at least 3 characters',
]);
}
}
?>
Результат выполнения кода:
true
Смотрите также
-
метод
assertValid,
который проверяет успешную валидацию -
метод
assertJsonValidationErrors,
который проверяет ошибки валидации в JSON-ответе -
метод
assertSessionHasErrors,
который проверяет ошибки в сессии -
метод
post,
который выполняет POST-запрос в тестах