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

React-Native preset下Jest的TransformIgnorePatterns失效求助

解决React Native Jest测试中的SyntaxError:Unexpected token :

这个问题的核心原因是你错误地忽略了整个node_modules目录,导致React Native自身的源码文件没有被Babel转译。React Native的部分核心文件(比如Platform.ios.js)使用了ES6+的getter语法,而Jest默认不会转译node_modules里的文件,所以才会抛出Unexpected token :的语法错误。

解决方案步骤:

  1. 修正transformIgnorePatterns配置
    你需要让Jest不要忽略react-native和你用到的第三方依赖(比如react-native-cookies),因为这些库的源码可能包含未转译的ES6+语法。修改package.json中的Jest配置:

    "jest": {
      "preset": "react-native",
      "verbose": true,
      "moduleDirectories": ["node_modules", "src"],
      "transformIgnorePatterns": [
        "node_modules/(?!(react-native|react-native-cookies)/)"
      ]
    },
    

    这里的(?!(react-native|react-native-cookies)/)是正则的负向前瞻,意思是:除了react-native和react-native-cookies这两个包之外,忽略其他所有node_modules里的文件。如果之后还有其他第三方库出现类似错误,只要把它们加到这个括号里即可(用|分隔)。

  2. 清除Jest缓存
    Jest会缓存转译后的文件,旧的缓存可能导致新配置不生效。运行以下命令清除缓存:

    npm test -- --clearCache
    
  3. 重新运行测试
    现在执行你的测试命令:

    npm test
    # 或者更新快照
    npm test -- -u
    

为什么之前的配置无效?

当你设置"transformIgnorePatterns": ["node_modules"]时,Jest会完全跳过node_modules目录下所有文件的转译工作。但React Native本身的源码依赖Babel转译才能在Jest环境中运行,所以这个配置会直接导致React Native的核心文件语法无法被识别,从而抛出错误。

额外检查项

  • 确保你的.babelrc配置正确,当前的"presets": ["react-native"]是符合要求的,如果你使用的是较新版本的React Native,也可以尝试替换为@babel/preset-react-native(需要先安装对应的包)。
  • 确认所有依赖都已正确安装,运行npm install或者yarn install确保没有缺失的依赖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:19:16