Jest 指定 --config 仍报 Could not find a config file
jest-config30.5.1/30.5.2判断全局配置时,会额外从cwd发现配置。当前目录与祖先没有配置时,显式配置文件也可能没能阻止这次错误。
Jest 已经通过 --config 指定一个存在的配置文件,仍报 Could not find a config file based on provided values,而消息里的 path、cwd 指向启动命令的另一个目录。使用 jest-config 30.5.1 或 30.5.2 时,应检查启动目录本身有没有可发现的配置或 package.json。
这条回归的条件是:显式配置在别处,当前工作目录及祖先没有可发现的 Jest 配置或 package.json。把 --config 改成绝对路径仍可能失败;错误不是简单说那个显式文件不存在。
显式配置读到了,额外发现仍然失败
30.5.2 的 readConfigs() 在判断谁提供全局配置时,还会尝试解析项目根的配置路径。对这个组合,它可能先从 cwd 向上发现配置,再决定显式配置的角色;额外解析抛错,测试尚未开始。
先对照报错中的目录与实际 --config 路径,并核对真正执行的 jest-config 版本。monorepo、任务调度器和编辑器测试入口常有不同 cwd;只在项目目录里重跑成功,尚未解释 CI 为什么失败。
如果命令给的是配置目录,而不是文件,还涉及 Jest 约定的文件名发现;配置文件不存在、扩展名或模块格式不受支持也需分别处理,不能都套用这里的回归。
让所拥有的测试任务从既有项目目录启动
暂时保留受影响版本时,可将该次测试子进程的 cwd 设为已经有 package.json 或正常 Jest 配置的项目目录,同时继续显式指定原配置文件。例如:
cd /absolute/path/to/existing-project
./node_modules/.bin/jest --ci --runInBand \
--config /absolute/path/to/existing-project/sub/custom.config.mjs
两处路径都要换成真实已有位置;这条命令会执行测试。项目使用工作区脚本或另一套包管理器时,沿用原来的已安装 Jest 入口,不必为了示例另装一份工具。
原配置的 rootDir、testMatch 和相对 setup 文件也要核对,不能通过改 cwd 顺手把测试范围变成另一个项目。对于并行任务调度器,应给自己创建的测试子进程设置 cwd,不要对共享进程全局 chdir()。
不建议在不相关的系统目录或其祖先随手放一个空 package.json。它虽然可能让发现停止,却会改变该目录的项目边界,掩盖真实启动配置。也不要把原配置复制到多个 cwd,让它们逐渐成为不同版本。
升级以实际发行代码为准
截至 2026 年 10 月 24 日,正式 jest、jest-config 仍为 30.5.2,对应实现仍包含这次额外发现。后续修正应明确支持“cwd 没有可发现配置,但传入了配置文件”的调用,不能把待合并的修改当成当前安装包已修。
在原来失败的外部启动环境和正常项目入口分别验收,确认两者实际选中的配置身份、rootDir 和测试文件列表符合预期,测试也真正运行。只看进程不再打印找不到配置,可能只是新 cwd 下另一份配置被自动选中了;还应检查项目原来的全局选项没有被当成逐项目选项而失效。


