Formik, Jest, Yup: как проверить валидацию? - PullRequest
0 голосов
/ 29 апреля 2019

Я не могу найти способ проверить правильность формы:

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,

1 Ответ

1 голос
/ 30 апреля 2019

Не видя ваш компонент, я не совсем уверен, что происходит не так. Скорее всего, это не сработает:

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

Если ваш компонент MyInnerForm содержит форму Formik, вызывающую submitForm(), запуск проверки Formik не будет выполняться. Я бы вместо этого сделал что-то вроде этого:

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

Однако, если это не решит вашу проблему, я привел полный пример того, что вы можете посмотреть на здесь .

...