我找不到测试表单验证的方法:
it('displays error on submit if name is empty', async () => {
const wrapper = mount(<MyFormik/>)
const getForm = () => wrapper.find('form')
wrapper.find('input[name="name"]').simulate('change', {
persist: () => {},
target: {
name: 'name',
value: ''
}
})
wrapper
.find('MyInnerForm')
.props()
.submitForm()
await wait(0) // await next tick or even 1s...
wrapper.update()
expect(
wrapper
.update()
.find('.error')
.exists()
)
.toBeTruthy() // FALSE!
})
无论我提交后是否等待,更新包装器错误道具始终为空。
这里的解决方案对我不起作用:
https://github.com/jaredpalmer/formik/issues/1146
https://github.com/jaredpalmer/formik/issues/110
看起来包装器不会更新
以下是提交后的formik道具日志:
{ errors: {},
label: '',
name: 'name',
type: 'text',
values: { name: '' },
touched: { name: true },
isValidating: false,
status: undefined,
initialValues: { name: '' },
validateOnChange: true,
validateOnBlur: true } }
...
submitCount: 1,
isValid: false,
答案 0 :(得分:1)
没有看到您的组件,我不确定是怎么回事。这可能无法正常工作:
wrapper
.find('MyInnerForm')
.props()
.submitForm()
如果您的组件MyInnerForm
包含调用submitForm()
的Formik表单,则不会导致Formik的验证运行。我会做这样的事情:
wrapper.find("form").simulate("submit");
但是,如果这不能解决您的问题,我举了一个完整的例子,您可以看看here。
答案 1 :(得分:0)
您可以直接在验证架构上验证表单值。
const yup = require('yup')
const contactSchema = yup.object({
name: yup.string()
.required(),
age: yup.number()
.required()
.positive()
.integer()
})
const errors = await contactSchema.validate({
name: 'Kenneth',
age: -35.5
}).catch(function(err) {
return err
});
console.log("errors", errors);