jest / react-native: 替换/分解 Linking.catch.



测试以下反应原生代码时遇到问题。

我想做的是用我的模拟代码替换 Linking.openURL 和 Linking.OpenURL.catch。

我正在为Linking.openURL做,如下所示:

jest.mock('Linking', () => {
      return {
        openURL: jest.fn()
      }
    })
Linking.openURL.mockImplementation(() => true)

但我不断得到:

TypeError: _reactNative.Linking.openURL(...).catch is not a function

知道如何替换/禁用 catch 子句吗?
这是我的代码:

func1() {
    switch (this.props.a) {
      case 'NO':
        this.alertMessage(`msg`)
        break
      case 'YES':
      default:
        Linking.openURL(url1).catch(err => { Linking.openURL(url2)
        })
    }
  }
  alertMessage = (title) => {
    Alert.alert(
      title,
      '',
      [
        { text: 'OK',
          onPress: () => {
            Linking.openURL(url1).catch(err => {
              Linking.openURL(url2)
            })
          } },
        { text: 'Cancel',
          onPress: () => {
            this.setState({
              stateVar1: true
            })
          },
          style: 'cancel' }
      ]
    )
  };
以防

万一有人收到消息错误Cannot find module 'Linking' from

只需将Linking替换为react-native/Libraries/Linking/Linking即可。

所以你的代码应该看起来像这样:

jest.mock('react-native/Libraries/Linking/Linking', () => ({
  openURL: jest.fn(() => Promise.reject('some error reason'))
}));

Linking.openURL返回一个Promise,所以模拟函数也需要返回一个。如果你想测试catch上发生了什么,你可以reject承诺(或者如果你不想调用捕获,resolve它)。

下面是一个拒绝承诺的模拟示例:

jest.mock('Linking', () => ({
  openURL: jest.fn(() => Promise.reject('some error reason'))
}));

相关内容

  • 没有找到相关文章

最新更新