Насмешка над отправкой в ​​окончательной форме реакции с использованием библиотеки тестирования реакции

У меня есть форма, построенная с использованием react-final-form, yup и Material-ui. Я тестирую, используя Jest и @testing-library/react.

TL;DR:

  • Есть ли способ имитировать и тестировать только функцию onSubmit, обходя/используя функциональность validate?
  • Есть ли лучший способ сделать это?

Поддельная функция onSubmit не была вызвана, потому что я использовал функцию validate RFF. Кажется, функция validate зависает во время процесса отправки. Помимо имитации функции validate, существует ли лучшая практика в создании функции проверки, чтобы тесты распознавали, что была вызвана имитируемая функция onSubmit?

Когда я пытаюсь проверить, была ли форма отправлена, она, кажется, зависает в методе проверки.

fireEvent.submit(getByTestId('test-form')) // or
fireEvent.click(getByTestId('submit-button'))

сбой имитации функции

Смоделированная функция onSubmit не распознается и, похоже, зависает в методе validate.

const schema = yup.object().shape({
    code: yup
        .string()
        .trim()
        .required('Please provide a Code')
        .max(32, 'The Code is too long')
})

const validate = values =>
    schema
        .validate(values, { abortEarly: false })
        .then(valid => ({}))
        .catch(err => extractError(err))

<Form
  onSubmit={onSubmit}
  validate={validate}
  render={({ handleSubmit }) => (
    <form onSubmit={handleSubmit}>
      {...fields and submit button here}
    </form>
  )
/>

Редактировать яркий-tesla-кожо


person jdkschang    schedule 22.01.2020    source источник
comment
Я думаю, мне нужно увидеть код для всего вашего теста. В идеале самая маленькая версия, которая выходит из строя. Все внутреннее тестирование RFF выполняется с помощью @testing-library/react, так что, может быть, вы можете заглянуть в этот источник, чтобы получить некоторые идеи?   -  person Erik R.    schedule 24.01.2020
comment
Спасибо за ответ! Я использовал файлы внутреннего тестирования RFF в качестве точки отсчета, что делает это еще более странным.   -  person jdkschang    schedule 24.01.2020
comment
Я определил, что основная проблема заключалась не в том, чтобы издеваться над реквизитом validate. Существует ли лучший способ проверить полную интеграцию формы без необходимости имитировать функцию проверки? Я просматривал проверку Final-Forms тестирует, но не может найти пример, который включает в себя тестирование вымышленного onSubmit @ErikR.   -  person jdkschang    schedule 25.01.2020
comment
Вам не нужно предоставлять функцию validate. Может быть, вы можете показать мне более конкретный пример, который терпит неудачу? Я не понимаю.   -  person Erik R.    schedule 27.01.2020
comment
@ЭрикР. В codeandbox должен быть обновленный пример, где тест не пройден. В конечном счете, я хотел бы проверить все поведение формы, включая метод validate, и чтобы он прошел. Есть ли способ выполнить всю форму, пройдя тест? Или вы рекомендуете тестировать поведение отдельно? --также спасибо за всю вашу работу над RFF и FF ????????   -  person jdkschang    schedule 27.01.2020


Ответы (1)


Мне удалось определить источник проблемы. Я использовал опору validate, не издеваясь над ней в своих тестах. Я решил эту проблему, смоделировав/проверив функцию validate отдельно. Большое спасибо @ErikR за помощь ????????

person jdkschang    schedule 29.01.2020