Как бы вы издевались над onPress в сторонней библиотеке - PullRequest
0 голосов
/ 30 января 2019

Этот вопрос похож на Как бы вы высмеяли 'onPress' в Alert?
Однако, поскольку приведенное там решение не применимо в этом случае, я публикую этот новыйвопрос.

Я использую внешнюю библиотеку, которая обеспечивает аналогичную функциональность для реактивного Alert.alert и добавляет поддержку асинхронного.Библиотека: https://github.com/slorber/react-native-alert-async.

Я пытаюсь смоделировать события OK / отмена этого асинхронного оповещения (AlertAsync), но, как уже было сказано выше, решение для «стандартного» реагирующего нативного Alert.alertздесь не применимо.

Здесь есть две проблемы:

  • Первый, похожий на ALERT реагирующего натива, высмеивает действия OK / отмены
  • Второйодин, обработка асинхронного ALERT вместе с вышеупомянутым

Любое предложение, как это сделать?

Вот что я попробовал:

Определение

jest.mock('react-native-alert-async', () => {
      return {
        AlertAsync: jest.fn()
      }
    })

Тест

Выпуск 1. Для следующего:

AlertAsync.calls[0][2][1].onPress()

Я получаю:

TypeError: Cannot read property '0' of undefined

Выпуск 2. В тесте мне нужно сначала вызвать (который вызывает AlertAsync), чтобы вызвать AlertAsync. Однако, поскольку он асинхронный, мне нужно сделать для него 'await', поэтому его вообще не вызывают ...

Вот пример теста, который не работает, очевидно:

expect.assertions(1)
await instance.handleCallingFunction()
AlertAsync.calls[0][2][1].onPress() // onPress Cancel

expect(<some-state>).toEqual(<expected-state>)
expect(<some-function>).toHaveBeenCalled()
expect(AlertAsync).toHaveBeenCalled()
...