Метод assertSessionHasErrors
Метод assertSessionHasErrors применяется к объекту HTTP-теста
для проверки наличия ошибок валидации в сессии. Он может принимать
массив ключей (названий полей) для проверки конкретных ошибок,
или массив с сообщениями для проверки текста ошибок.
Если метод вызывается без параметров, он проверяет, что есть хотя бы
одна ошибка валидации. Метод полезен при тестировании отправки форм
с некорректными данными.
Синтаксис
<?php
$this->assertSessionHasErrors($keys, $format, $errorBag);
?>
Параметры:
$keys- массив ключей (полей) для проверки наличия ошибок;$format- формат сообщения для проверки;$errorBag- имя пакета ошибок (по умолчанию'default').
Пример
Давайте проверим, что после отправки POST-запроса на создание статьи
с пустым полем 'title' возникает ошибка валидации:
<?php
namespace Tests\Feature;
use Tests\TestCase;
class ArticleTest extends TestCase
{
public function test_article_creation_with_empty_title()
{
$data = [
'title' => '',
'content' => 'Some content',
'status' => 'draft'
];
$response = $this->post('/articles', $data);
$response->assertSessionHasErrors(['title']);
}
}
?>
Результат выполнения кода:
"Test passed: session has error for 'title' field"
Пример
Проверим, что после отправки формы с некорректным email возникает ошибка в указанном пакете ошибок:
<?php
namespace Tests\Feature;
use Tests\TestCase;
class UserRegistrationTest extends TestCase
{
public function test_registration_with_invalid_email()
{
$data = [
'name' => 'John Doe',
'email' => 'invalid-email',
'password' => 'secret123'
];
$response = $this->post('/register', $data);
$response->assertSessionHasErrors(
['email' => 'The email must be a valid email address.'],
null,
'registration'
);
}
}
?>
Результат выполнения кода:
"Test passed: session has validation error in 'registration' bag"
Пример
Проверим, что после отправки формы с несколькими ошибками валидации присутствуют ошибки для нескольких полей одновременно:
<?php
namespace Tests\Feature;
use Tests\TestCase;
class ProductTest extends TestCase
{
public function test_product_creation_with_invalid_data()
{
$data = [
'name' => '',
'price' => 'not-a-number',
'stock' => -5
];
$response = $this->post('/products', $data);
$response->assertSessionHasErrors(['name', 'price', 'stock']);
}
}
?>
Результат выполнения кода:
"Test passed: session has errors for all required fields"
Смотрите также
-
метод
assertSessionHas,
который проверяет наличие значения в сессии -
метод
assertSessionMissing,
который проверяет отсутствие значения в сессии -
метод
assertValid,
который проверяет, что валидация прошла успешно -
метод
assertInvalid,
который проверяет наличие ошибок валидации в ответе JSON