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
相关产品推荐
相关产品推荐

