首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >React本机,不变冲突:本机模块不能为null。(指向OneSignal模块)

React本机,不变冲突:本机模块不能为null。(指向OneSignal模块)
EN

Stack Overflow用户
提问于 2018-06-03 01:47:02
回答 1查看 4.2K关注 0票数 2

我正在用Jest+Enzyme为一个使用OneSignal的react原生应用程序编写测试。

这里有一个类似的问题(我认为):https://github.com/facebook/jest/issues/2208,但这个问题已经很老了,我遵循了那里的解决方案,但没有一个对我有效。

最初,我在运行jest时遇到了这个错误

代码语言:javascript
复制
home/nrion/Desktop/mobile-ui/PriceInsight_app/node_modules/react-native-onesignal/index.js:4
    import { NativeModules, NativeEventEmitter, NetInfo, Platform } from 'react-native';
    ^^^^^^

    SyntaxError: Unexpected token import

    > 1 | import OneSignal from 'react-native-onesignal';
      2 | 
      3 | export const STORE_TIMEFRAME = 'STORE_TIMEFRAME';
      4 | export const STORE_TIMEFRAMES = 'STORE_TIMEFRAMES';

      at ScriptTransformer._transformAndBuildScript (../../../../../usr/lib/node_modules/jest-cli/node_modules/jest-runtime/build/script_transformer.js:316:17)
      at Object.<anonymous> (src/actions/subscription.js:1:387)
      at Object.<anonymous> (src/reducers/subscription.js:1:402)

所以我继续将react-native-onesignal添加到package.json中:

代码语言:javascript
复制
"transformIgnorePatterns": [
      "node_modules/(?!(react-native-onesignal|react-native-login|react-native-elements)/)"
    ]

这就解决了我的问题。但另一个问题来了:

代码语言:javascript
复制
 Invariant Violation: Native module cannot be null.

    > 1 | import OneSignal from 'react-native-onesignal';
      2 | 
      3 | export const STORE_TIMEFRAME = 'STORE_TIMEFRAME';
      4 | export const STORE_TIMEFRAMES = 'STORE_TIMEFRAMES';

      at invariant (node_modules/fbjs/lib/invariant.js:42:15)
      at new NativeEventEmitter (node_modules/react-native/Libraries/EventEmitter/NativeEventEmitter.js:37:31)
      at Object.<anonymous> (node_modules/react-native-onesignal/index.js:9:33)

我试着模拟OneSignal,但当我这样做时会发生这样的情况:

代码语言:javascript
复制
 Cannot find module 'OneSignal' from 'Main.test.js'

    > 1 | import React from 'react'
      2 | import { shallow } from '../../jest-setup'
      3 | import configureStore from 'redux-mock-store'
      4 | import OneSignal from 'react-native-onesignal'

      at Resolver.resolveModule (../../../../../usr/lib/node_modules/jest-cli/node_modules/jest-resolve/build/index.js:169:17)
      at Object.<anonymous> (src/__tests__/Main.test.js:1:108)

我已经被这个问题困扰了好几个小时了!我们将非常感谢您的任何见解。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-04 21:20:27

所以事实证明我的模型是错误的。它应该是:

代码语言:javascript
复制
jest.mock('react-native-onesignal', () => ({
  addEventListener: jest.fn(),
  removeEventListener: jest.fn(),
  inFocusDisplaying: jest.fn()
}))

正如本帖所指出的:https://github.com/facebook/jest/issues/6382#issuecomment-394104956

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50659597

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档