我找不到测试表格的方法是验证:
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!
})
无论我是否在提交后等待,更新包装器错误prop始终为空。
这里的解决方案对我不起作用:
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,
没有看到你的组件,我不完全确定出了什么问题。这可能不起作用:
wrapper
.find('MyInnerForm')
.props()
.submitForm()
如果你的组件MyInnerForm
包含一个调用submitForm()
的Formik表单,那么就不会运行Formik的验证。我会做这样的事情:
wrapper.find("form").simulate("submit");
但是,如果这不能解决你的问题,我做了一个完整的例子,你可以看看here。