--- id: example-react-formik title: Formik --- Example based in this [Async Submission Formik example](https://formik.org/docs/examples/async-submission) ```jsx // myForm.js import React from 'react' import {Formik, Field, Form} from 'formik' const sleep = ms => new Promise(r => setTimeout(r, ms)) export const MyForm = ({onSubmit}) => { const handleSubmit = async values => { await sleep(500) onSubmit(values) } return (

Sign Up

) } ``` ```jsx // myForm.test.js import React from 'react' import {render, screen, waitFor} from '@testing-library/react' import userEvent from '@testing-library/user-event' import {MyForm} from './myForm.js' test('rendering and submitting a basic Formik form', async () => { const handleSubmit = jest.fn() render() const user = userEvent.setup() await user.type(screen.getByRole('textbox', {name: /first name/i}), 'John') await user.type(screen.getByRole('textbox', {name: /last name/i}), 'Dee') await user.type( screen.getByRole('textbox', {name: /email/i}), 'john.dee@someemail.com', ) await user.click(screen.getByRole('button', {name: /submit/i})) await waitFor(() => expect(handleSubmit).toHaveBeenCalledWith({ email: 'john.dee@someemail.com', firstName: 'John', lastName: 'Dee', }), ) }) ```