我找不到测试表单 yup 验证的方法:
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!
})
Run Code Online (Sandbox Code Playgroud)
无论我是否在提交后等待,更新包装器错误道具始终为空。
这里的解决方案对我不起作用:
https://github.com/jaredpalmer/formik/issues/1146
https://github.com/jaredpalmer/formik/issues/110
看起来包装器不会更新
这是提交后 formik props 的日志:
{ 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,
Run Code Online (Sandbox Code Playgroud)
您可以直接在验证架构上验证表单值。
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);
Run Code Online (Sandbox Code Playgroud)
https://runkit.com/kluplau/5defa8cd122cf6001a3034c7
如果没有看到你的组件,我不完全确定出了什么问题。这可能不起作用:
wrapper
.find('MyInnerForm')
.props()
.submitForm()
Run Code Online (Sandbox Code Playgroud)
如果您的组件MyInnerForm包含 Formik 表单调用,submitForm()则不会导致 Formik 的验证运行。我会做这样的事情:
wrapper.find("form").simulate("submit");
Run Code Online (Sandbox Code Playgroud)
但是,如果这不能解决您的问题,我做了一个完整的示例,您可以在此处查看。
| 归档时间: |
|
| 查看次数: |
13607 次 |
| 最近记录: |