assertHasErrors
Метод assertHasErrors класса Testable используется
в тестах Livewire для проверки наличия ошибок валидации
в компоненте. Метод вызывается после выполнения какого-либо
действия, которое должно привести к появлению ошибок
(например, отправка формы с некорректными данными).
В качестве параметра можно передать ключи полей,
для которых ожидаются ошибки.
Синтаксис
Livewire::test(Component::class)
->call('method')
->assertHasErrors();
Метод может принимать следующие параметры:
-
$keys- ключи полей, для которых проверяется наличие ошибок (передаётся строкой или массивом); -
$rules- массив правил для проверки конкретных сообщений об ошибках (необязательный).
Пример
Пусть у нас есть компонент, который валидирует поле
$email при отправке формы:
<?php
namespace App\Livewire;
use Livewire\Component;
use Livewire\Attributes\Rule;
class LoginForm extends Component
{
#[Rule('required|email')]
public $email;
public $password;
public function submit()
{
$this->validate();
// login logic...
}
public function render()
{
return view('livewire.login-form');
}
}
?>
<form wire:submit="submit">
<input type="email" wire:model="email">
@error('email') <span>{{ $message }}</span> @enderror
<button type="submit">Login</button>
</form>
Теперь напишем тест, который проверяет, что при отправке пустого поля появляется ошибка:
<?php
namespace Tests\Unit;
use Tests\TestCase;
use Livewire\Livewire;
use App\Livewire\LoginForm;
class LoginFormTest extends TestCase
{
public function test_empty_email_has_error()
{
Livewire::test(LoginForm::class)
->set('email', '')
->call('submit')
->assertHasErrors(['email']);
}
}
?>
Пример
Метод assertHasErrors может проверять несколько полей
одновременно. Пусть в нашем компоненте валидируется
как $email, так и $password:
<?php
namespace App\Livewire;
use Livewire\Component;
use Livewire\Attributes\Rule;
class LoginForm extends Component
{
#[Rule('required|email')]
public $email;
#[Rule('required|min:6')]
public $password;
public function submit()
{
$this->validate();
// login logic...
}
public function render()
{
return view('livewire.login-form');
}
}
?>
Тест, проверяющий наличие ошибок для обоих полей:
<?php
namespace Tests\Unit;
use Tests\TestCase;
use Livewire\Livewire;
use App\Livewire\LoginForm;
class LoginFormTest extends TestCase
{
public function test_both_fields_have_errors()
{
Livewire::test(LoginForm::class)
->set('email', 'invalid')
->set('password', '123')
->call('submit')
->assertHasErrors(['email', 'password']);
}
}
?>
Пример
Если нужно проверить наличие ошибок для всех полей без указания конкретных ключей, можно вызвать метод без параметров:
<?php
namespace Tests\Unit;
use Tests\TestCase;
use Livewire\Livewire;
use App\Livewire\LoginForm;
class LoginFormTest extends TestCase
{
public function test_form_has_any_errors()
{
Livewire::test(LoginForm::class)
->set('email', '')
->set('password', '')
->call('submit')
->assertHasErrors();
}
}
?>
Пример
Метод также позволяет проверять конкретные сообщения
об ошибках с помощью передачи второго параметра
$rules. Проверим, что для поля $email
выводится правильное сообщение:
<?php
namespace Tests\Unit;
use Tests\TestCase;
use Livewire\Livewire;
use App\Livewire\LoginForm;
class LoginFormTest extends TestCase
{
public function test_email_has_correct_error_message()
{
Livewire::test(LoginForm::class)
->set('email', 'not-email')
->call('submit')
->assertHasErrors([
'email' => 'The email field must be a valid email address.'
]);
}
}
?>
Пример
Для проверки только наличия ошибки (без проверки текста) для конкретного поля можно передать ключ поля в виде строки:
<?php
namespace Tests\Unit;
use Tests\TestCase;
use Livewire\Livewire;
use App\Livewire\LoginForm;
class LoginFormTest extends TestCase
{
public function test_password_field_has_error()
{
Livewire::test(LoginForm::class)
->set('password', '')
->call('submit')
->assertHasErrors('password');
}
}
?>
Смотрите также
-
метод
assertHasNoErrors,
который проверяет отсутствие ошибок валидации -
метод
assertSet,
который проверяет значение свойства компонента -
метод
call,
который вызывает метод компонента в тесте -
метод
set,
который устанавливает значение свойства компонента в тесте