测试
概述
所有本指南内的示例都使用 Pest 编写。不过,你可以将其适配到 PHPUnit。
因为表单构造器是基于 Livewire 组件的,因此你也可以使用 Livewire 测试辅助函数。不过,我们自定义了一些测试辅助函数,让你可以用于表单测试:
填充表单
要填充表单,请将数据传入 fillform():
use function Pest\Livewire\livewire;
livewire(CreatePost::class)
->fillForm([
'title' => fake()->sentence(),
// ...
]);
如果一个 Livewire 组件中有多个表单,你可以使用
fillForm([...], 'createPostForm')指定你想要填充哪个表单。
使用 assertFormSet() 断言表单中有数据:
use Illuminate\Support\Str;
use function Pest\Livewire\livewire;
it('can automatically generate a slug from the title', function () {
$title = fake()->sentence();
livewire(CreatePost::class)
->fillForm([
'title' => $title,
])
->assertFormSet([
'slug' => Str::slug($title),
]);
});
注意,如果一个 Livewire 组件中有多个表单,你可以使用
assertFormSet([...], 'createPostForm')指定你想要检测哪个表单。
验证
使用 assertHasFormErrors() 断言对表单中的数据进行有效验证:
use function Pest\Livewire\livewire;
it('can validate input', function () {
livewire(CreatePost::class)
->fillForm([
'title' => null,
])
->assertHasFormErrors(['title' => 'required']);
});
同时 assertHasNoFormErrors() 断言没有验证错误:
use function Pest\Livewire\livewire;
livewire(CreatePost::class)
->fillForm([
'title' => fake()->sentence(),
// ...
])
->call('save')
->assertHasNoFormErrors();
注意,如果一个 Livewire 组件中有多个表单,你可以将指定表单名作为第二个参数传入,像这样
assertHasFormErrors(['title' => 'required'], 'createPostForm')或assertHasNoFormErrors([], 'createPostForm')。
表单存在
断言 Livewire 组件中有一个表单,请使用 assertFormExists():
use function Pest\Livewire\livewire;
it('has a form', function () {
livewire(CreatePost::class)
->assertFormExists();
});
如果一个 Livewire 组件中有多个表单,你可以将指定的表单名传入
assertFormExists('createPostForm')。
字段
断言表单中有某个给定 字段,请将字段名传入到 assertFormFieldExists():
use function Pest\Livewire\livewire;
it('has a title field', function () {
livewire(CreatePost::class)
->assertFormFieldExists('title');
});
你也可以传入函数作为额外的参数,来断言一个字段传入了一个"真值测试”"。着对断言一个字段有某个特定配置非常有用:
use function Pest\Livewire\livewire;
it('has a title field', function () {
livewire(CreatePost::class)
->assertFormFieldExists('title', function (TextInput $field): bool {
return $input->isDisabled();
});
});
如果 Livewire 组件有多个表单,你可以指定哪个表单要断言字段是否存在。比如
assertFormFieldExists('title', 'createPostForm')。
Hidden 字段
断言表单中有某个字段可见,将字段名传入到 assertFormFieldIsVisible():
use function Pest\Livewire\livewire;
test('title is visible', function () {
livewire(CreatePost::class)
->assertFormFieldIsVisible('title');
});
或者断言表单中隐藏某个字段,将字段名传入到 assertFormFieldIsHidden():
use function Pest\Livewire\livewire;
test('title is hidden', function () {
livewire(CreatePost::class)
->assertFormFieldIsHidden('title');
});
对于
assertFormFieldIsHidden()和assertFormFieldIsVisible(),你可以传递该字段所属表单的名称作为第二个参数,比如assertFormFieldIsHidden('title', 'createPostForm')。
禁用字段
要断言字段可用,请传递字段名到 assertFormFieldIsEnabled():
use function Pest\Livewire\livewire;
test('title is enabled', function () {
livewire(CreatePost::class)
->assertFormFieldIsEnabled('title');
});
要断言字段禁用,请传递字段名到 assertFormFieldIsDisabled():
use function Pest\Livewire\livewire;
test('title is disabled', function () {
livewire(CreatePost::class)
->assertFormFieldIsDisabled('title');
});
对于
assertFormFieldIsEnabled()和assertFormFieldIsDisabled(),你可以传递该字段所属表单的名称作为第二个参数,比如assertFormFieldIsEnabled('title', 'createPostForm')。