您如何在第三方库中模拟“ onPress”

时间:2019-01-30 07:13:09

标签: reactjs unit-testing react-native jestjs enzyme

此问题类似于How would you mock 'onPress' within Alert?
但是,由于此处给出的解决方案在这种情况下不适用,因此我发布了这个新问题。

我正在使用一个外部库,该库提供类似功能以响应本机Alert.alert,并增加了异步支持。该库为https://github.com/slorber/react-native-alert-async

我正在尝试模拟该异步警报(AlertAsync)上的OK /取消事件,但是,如上所述,“标准”反应本机Alert.alert的解决方案不适用于此处。< / p>

这里有两个挑战:

  • 第一个,类似于react-native的ALERT,模拟了OK / cancel动作
  • 第二,与上述内容一起处理异步警报

有什么建议怎么做?

这是我尝试过的:

定义

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 但是,由于它是异步的,因此我需要对其进行“等待”,因此根本不会被调用...

以下是无法正常工作的测试示例:

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()

0 个答案:

没有答案