Я пишу тест, чтобы убедиться, что моя форма отправляется с использованием библиотеки тестирования реакции, и я также использую форму реакции на крючок. Мой метод отправки не вызывается в моем тесте. Я приветствую следующую ошибку при запуске этого теста:
● reset password should send
expect(jest.fn()).toHaveBeenCalled()
Expected number of calls: >= 1
Received number of calls: 0
Может кто-нибудь объяснить, что я делаю неправильно?
Мой компонент
const ResetPassword = () => {
const { handleSubmit } = useForm();
const onSubmit = (resetFormData: { email: string }) => {
const { email } = resetFormData;
// sends email using external API
};
return (
<form onSubmit={handleSubmit(onSubmit)}>
<input
name="email"
type="text"
placeholder="Email Address"
/>
<button type="submit">
Send Email
</button>
</form>
);
};
export default ResetPassword;
Мой тестовый файл
import userEvent from '@testing-library/user-event';
import { render, cleanup, screen, act } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
afterEach(cleanup);
it('reset password should send', async () => {
render(<ResetPassword />);
const handleSubmit = jest.fn();
const onSubmit = jest.fn();
const value = '[email protected]';
const input = screen.getByPlaceholderText(/Email Address/i);
await userEvent.type(input, value);
await act(async () => {
userEvent.click(screen.getByRole('button', { name: /Send Email/i }));
});
expect(onSubmit).toHaveBeenCalled();
});
onSubmit
с таким же именем в вашем тесте ничего не даст. Для интерпретатора это совсем другая функция. Вам нужно смоделировать фактическую функцию, которая вызывается в вашем компоненте. Кроме того, это тестирование деталей реализации и, как правило, не рекомендуется. Лучшим способом проверить это было бы смоделировать фактическую выборку, которая происходит при отправке. - person trixn   schedule 31.01.2021