You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native运行App-test.js测试失败报Native module cannot be null如何解决

错误产生原因

Jest测试默认运行在无原生能力的Node.js环境,不存在React Native端的原生模块实现。你项目中使用的react-native-file-viewer是依赖原生端能力的三方库,它初始化时会实例化NativeEventEmitter绑定对应原生模块,测试环境下原生模块返回null,直接触发Invariant Violation报错。

排查步骤
  • 确认报错链路:根据错误栈可以看到,测试运行时加载了src/screens/CreatePostScreen.js,该文件引入了react-native-file-viewer,触发了库的初始化逻辑
  • 检查Jest配置:确认当前没有对react-native-file-viewer做Mock处理,也没有配置对应的转译忽略规则
修复方案
  • 方案1:Mock原生三方库(最常用)
    在项目根目录的__mocks__文件夹下新建react-native-file-viewer.js文件,写入Mock内容,覆盖原有库的逻辑:

    export default {
      open: jest.fn(),
      // 补全所有你项目中用到的该库的API的Mock实现
    }
    

    如果仅需要针对单个测试文件生效,可以直接在测试文件顶部添加:
    jest.mock('react-native-file-viewer', () => ({ open: jest.fn() }))

  • 方案2:调整Jest转译规则
    检查jest.config.js中的transformIgnorePatterns配置,确保react-native-file-viewer被列入需要转译的包范围:

    module.exports = {
      transformIgnorePatterns: [
        'node_modules/(?!(react-native|react-native-file-viewer|其他需要转译的React Native依赖)/)'
      ]
    }
    
  • 方案3:业务代码优化(可选)
    把react-native-file-viewer的引入逻辑调整为调用时动态引入,避免页面初始化阶段就加载该库,从根源上避免测试环境触发原生库初始化逻辑。

内容的提问来源于stack exchange,提问作者Tasbeel Zahid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 12:06:07