Big*_*her 4 javascript mocking apple-push-notifications jestjs react-native
使用模块时react-native-push-notification,我遇到了这个错误:
FAIL __tests__/index.android.js
? Test suite failed to run
Invariant Violation: Native module cannot be null.
at invariant (node_modules/fbjs/lib/invariant.js:44:15)
at new NativeEventEmitter (node_modules/react-native/Libraries/EventEmitter/NativeEventEmitter.js:32:1)
at Object.<anonymous> (node_modules/react-native/Libraries/PushNotificationIOS/PushNotificationIOS.js:18:29)
at Object.get PushNotificationIOS [as PushNotificationIOS] (node_modules/react-native/Libraries/react-native/react-native.js:97:34)
at Object.<anonymous> (node_modules/react-native-push-notification/component/index.ios.js:10:23)
Run Code Online (Sandbox Code Playgroud)
我试图通过创建__mocks__/react-native.js并将此代码放入其中来模拟模块:
const rn = require('react-native')
jest.mock('PushNotificationIOS', () => ({
addEventListener: jest.fn(),
requestPermissions: jest.fn(),
then: jest.fn()
}));
module.exports = rn
Run Code Online (Sandbox Code Playgroud)
现在,我有这个错误:
FAIL __tests__/index.android.js
? Test suite failed to run
TypeError: Cannot read property 'then' of null
at Object.<anonymous>.Notifications.popInitialNotification (node_modules/react-native-push-notification/index.js:278:42)
at Object.<anonymous>.Notifications.configure (node_modules/react-native-push-notification/index.js:93:6)
at Object.<anonymous> (app/utils/localPushNotification.js:4:39)
at Object.<anonymous> (app/actions/trip.js:5:28)
Run Code Online (Sandbox Code Playgroud)
我如何以正确的方式完全模拟这个模块?
我PushNotificationIOS通过创建一个安装文件来模拟模块jest/setup.js:
jest.mock('PushNotificationIOS', () => {
return {
addEventListener: jest.fn(),
requestPermissions: jest.fn(() => Promise.resolve()),
getInitialNotification: jest.fn(() => Promise.resolve()),
}
});
Run Code Online (Sandbox Code Playgroud)
我已经配置了 jest 来运行这个设置文件,方法是将这一行添加到packages.json:
"jest": {
...
"setupFiles": ["./jest/setup.js"],
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3500 次 |
| 最近记录: |