Formik,开玩笑,是的:如何测试验证?

问题描述 投票:0回答:1

我找不到测试表格的方法是验证:

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,
jestjs formik yup
1个回答
1
投票

没有看到你的组件,我不完全确定出了什么问题。这可能不起作用:

wrapper
      .find('MyInnerForm')
      .props()
      .submitForm()

如果你的组件MyInnerForm包含一个调用submitForm()的Formik表单,那么就不会运行Formik的验证。我会做这样的事情:

wrapper.find("form").simulate("submit");

但是,如果这不能解决你的问题,我做了一个完整的例子,你可以看看here

© www.soinside.com 2019 - 2024. All rights reserved.