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

React Native集成Jest遇SyntaxError: Unexpected token '{'错误求助

解决React Native中Jest运行时出现的SyntaxError: Unexpected token '{'错误

我之前在React Native项目里配置Jest时也碰到过一模一样的错误,这种问题大多和语法转译、配置遗漏或者测试文件本身的语法问题有关。结合你的配置和测试代码,我整理了几个可行的解决思路:

1. 先修复测试文件的语法错误

仔细看你的App-test.js代码,最后一个describe块少了闭合的括号!这会直接导致Jest解析时抛出Unexpected token错误,先把这个问题解决:

describe('Some component', () => { 
  it('renders correctly', () => { 
    const tree = renderer.create(<SomeComponent />).toJSON(); 
    expect(tree).toMatchSnapshot(); 
  }); 
}); // 补充这个缺失的闭合括号

2. 确认Babel配置文件存在且正确

React Native项目需要明确的Babel配置来让Jest正确转译ES6+语法。如果你的项目根目录没有.babelrc或者babel.config.js,请创建babel.config.js文件,内容如下:

module.exports = {
  presets: ['module:metro-react-native-babel-preset'],
};

这个预设是React Native官方提供的,能确保Jest和Metro使用一致的转译规则。

3. 调整Jest的transformIgnorePatterns配置

你的配置里已经包含了一些需要转译的依赖,但可能遗漏了react-native-google-signin(即使你mock了它,实际项目代码里可能引入了它的未转译代码)。修改transformIgnorePatterns,把这个依赖添加进去:

"jest": { 
  "preset": "react-native", 
  "cacheDirectory": "./cache", 
  "coveragePathIgnorePatterns": [ "./app/utils/vendor" ], 
  "coverageThreshold": { "global": { "statements": 80 } }, 
  "transformIgnorePatterns": [ 
    "/node_modules/(?!react-native|react-clone-referenced-element|react-navigation|native-base-shoutem-theme|@shoutem/animation|@shoutem/ui|tcomb-form-native|react-native-google-signin)" 
  ] 
}

这个规则的意思是:除了括号里列出的依赖,其他node_modules里的包都跳过转译。确保所有用到的非转译第三方依赖都被包含进来。

4. 清除Jest缓存

缓存目录里的旧转译结果可能会导致奇怪的错误,运行以下命令清除缓存:

jest --clearCache

或者直接手动删除项目里的./cache目录,然后重新运行测试命令。

5. 检查依赖版本兼容性

你的babel-jest(24.9.0)和@babel/core(7.6.4)版本是兼容的,但如果前面的方法都无效,可以尝试升级Jest相关依赖到更稳定的版本(比如25.x或26.x),注意保持babel-jest和jest版本一致,同时确保和metro-react-native-babel-preset版本匹配。

内容的提问来源于stack exchange,提问作者César

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:53:11