шутка / реакция-нативная: замена / дисбаланс Linking.catch - PullRequest
0 голосов
/ 13 января 2019

Возникли проблемы при тестировании следующего реагирующего кода.

Я хотел бы заменить 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' }
      ]
    )
  };

1 Ответ

0 голосов
/ 14 января 2019

Linking.openURL возвращает Promise, поэтому фиктивная функция также должна возвращать его. Если вы хотите проверить, что происходит на catch, вы можете reject обещание (или resolve это, если вы не хотите, чтобы улов вызывался).

Вот пример для насмешки с отклоненным обещанием:

jest.mock('Linking', () => ({
  openURL: jest.fn(() => Promise.reject('some error reason'))
}));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...