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

React 18配置Husky预提交与Jest:未找到测试用例退出码1

解决CRA React18项目中Husky预提交钩子Jest找不到测试用例的问题

1. 不要直接执行jest命令,改用CRA自带的测试命令

CRA封装了Jest的完整配置(包括Babel、路径解析等),直接跑jest会绕过这些配置,导致即使路径正确也无法识别测试文件。哪怕硬编码测试文件路径,也会因为缺少CRA的环境配置而失效。

解决方法:

  • 把预提交脚本中的test命令替换为react-scripts test --watchAll=false
    • 加上--watchAll=false是为了关闭Jest的监听模式,确保预提交时一次性跑完所有测试后退出。

2. 移除package.json中自定义的testMatch配置

CRA有默认的测试文件匹配规则,已经覆盖了__tests__文件夹下的.test.js/.test.jsx等文件,自定义的testMatch会和默认规则冲突,导致匹配失效。CRA默认的匹配规则如下:

{
  "testMatch": [
    "**/__tests__/**/*.[jt]s?(x)",
    "**/?(*.)+(spec|test).[tj]s?(x)"
  ]
}

解决方法:

  • 删除package.json中的jest.testMatch配置块,直接使用CRA的默认规则即可满足需求。

3. 确认Husky钩子的工作目录为项目根目录

偶尔Husky钩子会因为配置问题在非项目根目录执行,导致Jest找不到测试文件。

解决方法:

  • 在预提交脚本中添加pwd命令,提交时查看输出的当前路径是否为项目根目录。如果不是,在钩子脚本开头添加cd /path/to/your/project(替换为你的项目绝对路径)。

4. 验证测试文件的命名和语法有效性

虽然你提到存在logging.test.js,但仍需确认:

  • 文件名严格符合.test.js后缀(没有写成.test.jsx或拼写错误)
  • 测试文件内的代码没有语法错误,比如可以先写一个极简测试验证:
test('基础测试', () => {
  expect(true).toBe(true);
});
  • 单独执行react-scripts test logging.test.js,看是否能正常运行该测试,排除测试文件本身的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 20:13:13