在测试下列反应本机程式码时有困难。
我想要做的是用模拟代码替换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' }
]
)
};发布于 2019-01-14 20:36:26
Linking.openURL返回一个Promise,因此模拟函数也需要返回一个。如果您想测试在catch上发生了什么,您可以reject承诺(如果不希望调用捕获,则可以使用resolve )。
下面是一个被拒绝承诺的模拟例子:
jest.mock('Linking', () => ({
openURL: jest.fn(() => Promise.reject('some error reason'))
}));发布于 2020-05-12 08:01:06
以防万一消息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'))
}));https://stackoverflow.com/questions/54170367
复制相似问题