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

Jest手动模拟__mocks__文件夹位置不符文档仍生效,能否依赖该行为?

Jest模块模拟路径的非规范行为是否可依赖?

核心问题解答

你遇到的情况是:Jest文档明确要求手动模拟Node第三方模块(如axios)时,__mocks__文件夹需与node_modules同级,但实际将__mocks__放在src目录下(层级低于node_modules),Jest仍能正确加载模拟而非原模块。针对该问题的具体分析如下:

1. 该非规范行为绝对不可依赖

这属于Jest模块解析逻辑中未被官方文档明确的隐式行为——Jest在查找模块模拟时,除了文档指定的同级路径,还会顺着当前测试模块的解析路径额外查找__mocks__目录。但这种未被官方背书的行为没有任何稳定性保障,随时可能因为Jest的版本更新、模块解析逻辑优化或bug修复而失效。

2. 该行为大概率会被变更

Jest维护团队一直致力于让实际行为与官方文档保持一致。后续版本极有可能收紧模块模拟的查找规则,仅保留文档明确规定的路径(与node_modules同级的__mocks__),或调整查找优先级,导致src下的__mocks__不再被优先加载。尤其是在Jest优化解析性能、修复模块查找冲突的场景下,这种“额外路径”很容易被移除。

3. 暂无需修订Jest文档

从Jest的设计逻辑来看,src目录下的__mocks__原本是用来模拟项目内部模块(比如src/utils/request.js的模拟放在src/__mocks__/utils/request.js),而非第三方Node模块。你遇到的情况更像是模块解析逻辑的“副作用”,而非官方有意设计的特性,因此官方大概率不会为这个场景修订文档。

合规操作建议

如果需要在测试中引用第三方模块的模拟,正确的操作是:

  • 将第三方模块的模拟文件放在与node_modules同级的__mocks__目录下,测试文件中通过jest.mock('axios')自动加载模拟;
  • 若必须在项目代码中引用模拟(不推荐,测试模拟应仅在测试环境生效),可通过相对路径导入,或配置Jest的moduleNameMapper字段映射模拟路径,彻底避免依赖未文档化的行为。

内容的提问来源于stack exchange,提问作者Mickey Puri

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 21:15:11