--- title: Testing --- All examples in this guide will be written using [Pest](https://pestphp.com). However, you can easily adapt this to PHPUnit. Since the form builder works on Livewire components, you can use the [Livewire testing helpers](https://laravel-livewire.com/docs/testing). However, we have custom testing helpers that you can use with forms: ## Filling a form To fill a form with data, pass the data to `fillform()`: ```php use function Pest\Livewire\livewire; livewire(CreatePost::class) ->fillForm([ 'title' => fake()->sentence(), // ... ]); ``` > Note that if you have multiple forms on a Livewire component, you can specify which form you want to fill using `fillForm([...], 'createPostForm')`. To check that a form has data, use `assertFormSet()`: ```php 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), ]); }); ``` > Note that if you have multiple forms on a Livewire component, you can specify which form you want to check using `assertFormSet([...], 'createPostForm')`. ## Validation Use `assertHasFormErrors()` to ensure that data is properly validated in a form: ```php use function Pest\Livewire\livewire; it('can validate input', function () { livewire(CreatePost::class) ->fillForm([ 'title' => null, ]) ->assertHasFormErrors(['title' => 'required']); }); ``` And `assertHasNoFormErrors()` to ensure there are no validation errors: ```php use function Pest\Livewire\livewire; livewire(CreatePost::class) ->fillForm([ 'title' => fake()->sentence(), // ... ]) ->call('save') ->assertHasNoFormErrors(); ``` > Note that if you have multiple forms on a Livewire component, you can pass the name of a specific form as the second parameter like `assertHasFormErrors(['title' => 'required'], 'createPostForm')` or `assertHasNoFormErrors([], 'createPostForm')`. ## Form existence To check that a Livewire component has a form, use `assertFormExists()`: ```php use function Pest\Livewire\livewire; it('has a form', function () { livewire(CreatePost::class) ->assertFormExists(); }); ``` > Note that if you have multiple forms on a Livewire component, you can pass the name of a specific form like `assertFormExists('createPostForm')`. ## Fields To ensure that a form has a given field pass the field name to `assertFormFieldExists()`: ```php use function Pest\Livewire\livewire; it('has a title field', function () { livewire(CreatePost::class) ->assertFormFieldExists('title'); }); ``` You may pass a function as an additional argument in order to assert that a field passes a given "truth test". This is useful for asserting that a field has a specific configuration: ```php use function Pest\Livewire\livewire; it('has a title field', function () { livewire(CreatePost::class) ->assertFormFieldExists('title', function (TextInput $field): bool { return $input->isDisabled(); }); }); ``` > Note that if you have multiple forms on a Livewire component, you can specify which form you want to check for the existence of the field like `assertFormFieldExists('title', 'createPostForm')`. ### Hidden fields To ensure that a field is visible pass the name to `assertFormFieldIsVisible()`: ```php use function Pest\Livewire\livewire; test('title is visible', function () { livewire(CreatePost::class) ->assertFormFieldIsVisible('title'); }); ``` Or to ensure that a field is hidden you can pass the name to `assertFormFieldIsHidden()`: ```php use function Pest\Livewire\livewire; test('title is hidden', function () { livewire(CreatePost::class) ->assertFormFieldIsHidden('title'); }); ``` > Note that for both `assertFormFieldIsHidden()` and `assertFormFieldIsVisible()` you can pass the name of a specific form the field belongs to as the second argument like `assertFormFieldIsHidden('title', 'createPostForm')`. ### Disabled fields To ensure that a field is enabled pass the name to `assertFormFieldIsEnabled()`: ```php use function Pest\Livewire\livewire; test('title is enabled', function () { livewire(CreatePost::class) ->assertFormFieldIsEnabled('title'); }); ``` Or to ensure that a field is disabled you can pass the name to `assertFormFieldIsDisabled()`: ```php use function Pest\Livewire\livewire; test('title is disabled', function () { livewire(CreatePost::class) ->assertFormFieldIsDisabled('title'); }); ``` > Note that for both `assertFormFieldIsEnabled()` and `assertFormFieldIsDisabled()` you can pass the name of a specific form the field belongs to as the second argument like `assertFormFieldIsEnabled('title', 'createPostForm')`.