我有使用Formik的简单表单组件(InterestedOffering.tsx),并将onSubmit函数作为道具传递。在我的单元测试(酶)中,我检查提交表单时是否调用了传递的prop函数,但失败了
InterestedOffering组件
<Formik
initialValues={{
name: '',
phone: '',
offering: 'test offering'
}}
validationSchema={interestedOfferingSchema}
onSubmit={(values, {setSubmitting}) => {
setFormValues(values);
props.changeSaleDetails(values);
openModal();
setSubmitting(false);
}}>
{({errors, touched, isSubmitting}) => (
<Form>
<Field name="name"> .... more
InterestedOffering.test文件
let mock = jest.fn();
const wrapper = mount(<InterestedOffering
changeSaleDetails={mock}/>);
act(() => {
const nameField = wrapper.find('input[name="name"]');
const phoneField = wrapper.find('input[name="phone"]');
const offeringField = wrapper.find('input[name="offering"]');
nameField.simulate('change', {
persist: () => {
},
target: {value: 'test name', name: 'name'}
});
phoneField.simulate('change', {
persist: () => {
},
target: {value: 12313, name: 'phone'}
});
offeringField.simulate('change', {
persist: () => {
},
target: {value: 'test offering', name: 'offering'}
});
const form = wrapper.find('form');
form.simulate('submit', {
preventDefault: () => {
},
});
});
setTimeout(() => {
wrapper.update();
expect(mock).toHaveBeenCalled();
done();
}, 0);
我通过输入错误的数据并以相同的方式提交表单来编写验证测试。那测试通过了。 我不为什么这个模拟功能永远不会得到调用。确实也增加了超时时间,但没有帮助。