Testing Utilities
Helpers for testing forms with Vitest and @testing-library/react
Overview
@letar/forms/testing provides helpers that reduce boilerplate when testing forms. It wraps @testing-library/react with form-specific utilities.
# Peer dependencies
npm install -D @testing-library/react @testing-library/user-event @testing-library/jest-domQuick Example
import { renderForm, fillField, submitForm, expectFieldError } from '@letar/forms/testing'
const { onSubmit } = renderForm(ContactForm)
await fillField('name', 'Ivan')
await fillField('email', 'invalid')
await submitForm()
expectFieldError('email', 'Invalid email')renderForm
Renders a form component wrapped in ChakraProvider. Returns the standard @testing-library/react result plus bound helpers.
const { fillField, submitForm, expectFieldError, onSubmit } = renderForm(MyForm, {
defaults: { name: '', email: '' },
onSubmit: vi.fn(),
})fillField
Fills a field by its data-field-name attribute. Auto-detects field type:
- Text/Email/Password/Textarea — clears and types
- Number — clears and types
- Checkbox/Switch — clicks to toggle
await fillField('name', 'Ivan')
await fillField('age', 25)
await fillField('agree', true)Assertion Helpers
expectFieldError('email', 'Invalid email') // Field shows this error
expectNoFieldError('email') // Field has no errors
expectFieldValue('name', 'Ivan') // Field has this valueMulti-step Helpers
await goToStep(2) // Click "Next" to reach step 2
expectActiveStep(2) // Assert current stepArray Helpers
await addItem('phones') // Click "Add" in list
await removeItem(0, 'phones') // Remove first item
expectItemCount('phones', 3) // Assert item countTestWrapper
Standalone ChakraProvider wrapper for custom test setups:
import { TestWrapper } from '@letar/forms/testing'
render(<TestWrapper><MyComponent /></TestWrapper>)Live Example
Try the interactive example on forms-example.letar.best.