archansel · GitHub

Hi, I tried to test my form submission using react-testing-library but cannot find a way to make it submitting the form

<Formik
    initialValues={{ email: '', phone: '', firstName: '', lastName: '' }}
    validationSchema={validationSchema}
    onSubmit={handleSubmit}
    render={({ isSubmitting }) => (
        <Form className="form">
            <EmailField
                className="form__input form__input__email"
                label="Email"
                sublabel="Tickets will be sent to this email"
                placeholder="Your email address"
                name="email"
                disabled={isSubmitting}
                required
            />
            <PhoneField
                className="form__input form__input__phone"
                label="Phone Number"
                placeholder="0811-2345-66788"
                name="phone"
                disabled={isSubmitting}
                required
            />
            <TextField
                className="form__input form__input__first-name"
                label="First Name"
                placeholder="First name"
                name="firstName"
                disabled={isSubmitting}
                required
            />
            <TextField
                className="form__input form__input__last-name"
                label="Last Name"
                placeholder="Last name"
                name="lastName"
                disabled={isSubmitting}
                required
            />
            <Button className="form__navigation__continue" type="submit" variant="success" loading={isSubmitting}>
                Continue
            </Button>
        </Form>
    )}
/>

This is my test case

it('should navigate when submit button clicked', () => {
    const mockOnSessionChange = jest.fn();
    const mockOnNavigate = jest.fn();
    const { container } = renderComponent({ onSessionChange: mockOnSessionChange, onNavigate: mockOnNavigate });
    const emailInput = container.querySelector('input[name="email"]');
    const phoneInput = container.querySelector('input[name="phone"]');
    const firstNameInput = container.querySelector('input[name="firstName"]');
    const lastNameInput = container.querySelector('input[name="lastName"]');
    const submitButton = container.querySelector('button[type="submit"]');
    fireEvent.change(emailInput, { persist: jest.fn(), target: { value: 'email@example.com' } });
    fireEvent.change(phoneInput, { persist: jest.fn(), target: { value: '0811234566788' } });
    fireEvent.change(firstNameInput, { persist: jest.fn(), target: { value: 'First Name' } });
    fireEvent.change(lastNameInput, { persist: jest.fn(), target: { value: 'Last Name' } });
    fireEvent.click(submitButton);
    expect(mockOnSessionChange).toHaveBeenCalledWith(session);
    expect(mockOnNavigate).toHaveBeenCalledWith(`/orders/${order.number}/${session}`);
});

handleSubmit was never called so the form never submitting. How to make it work with react-testing-library? did I miss something?

Read the original on github.com ↗