React-Native preset下Jest的TransformIgnorePatterns失效求助
这个问题的核心原因是你错误地忽略了整个node_modules目录,导致React Native自身的源码文件没有被Babel转译。React Native的部分核心文件(比如Platform.ios.js)使用了ES6+的getter语法,而Jest默认不会转译node_modules里的文件,所以才会抛出Unexpected token :的语法错误。
解决方案步骤:
修正
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里的文件。如果之后还有其他第三方库出现类似错误,只要把它们加到这个括号里即可(用|分隔)。清除Jest缓存
Jest会缓存转译后的文件,旧的缓存可能导致新配置不生效。运行以下命令清除缓存:npm test -- --clearCache重新运行测试
现在执行你的测试命令: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

