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

如何阻止Jest扫描指定大型目录以提升测试执行速度?

Jest扫描大量无关目录导致测试结果延迟的解决方案

问题背景

项目目录下存在1500+子目录与75000+文件,其中以mod92_/Mod92_开头的目录包含大量模型数据,导致Jest测试执行完成后,需等待超一分钟才显示结果。移除这些目录后测试可瞬间完成,推测核心问题是无关目录的扫描耗时。尝试通过testPathIgnorePatterns配置忽略此类目录,但规则未生效。

当前Jest配置

{
  "testMatch": ["**/__tests__/*.js"],
  "testPathIgnorePatterns": [
    "/\\.git/", 
    "/Mod92_.*/", 
    "/mod92_.*/", 
    "/\\.pytest_cache/", 
    "/\\.vs*/", 
    "/node_modules/", 
    "/py_tests/", 
    "/pyenv/"
  ]
}

项目目录结构

__tests__
bin
   js
   python
data
master
.git
.vscode
# 其他众多点目录
mod92_abc
Mod92_def
mod92_xyz
# 更多同类型目录

限制条件

  • 测试文件当前位于__tests__,未来可能新增bin/js/__tests__目录
  • 被测代码在bin/js,无法使用roots配置(会限制被测代码查找范围,不兼容未来测试目录)

环境信息

  • Jest 29.7
  • Node.js 20.9.0
  • VSCode 1.86.0 + vscode-jest 5.2.3
  • Windows Server 2019 Standard v1809

问题定位与解决方案

1. 修正testPathIgnorePatterns正则规则

原正则未准确匹配Windows环境下的根目录级mod92_*目录,且缺少完整的路径边界匹配。调整后的配置兼容跨平台路径,精准匹配需忽略的目录:

{
  "testMatch": ["**/__tests__/*.js"],
  "testPathIgnorePatterns": [
    // 忽略常见无关目录
    "^(.*[\\\\/])?(\\.git|\\.pytest_cache|\\.vs|node_modules|py_tests|pyenv)([\\\\/].*)?$",
    // 精准匹配根目录下mod92_/Mod92_开头的目录
    "^(.*[\\\\/])?(mod92_|Mod92_)(.*)$"
  ]
}

规则说明:

  • [\\\\/]兼容Windows(\)与Unix(/)路径分隔符
  • ^和$确保匹配完整路径片段,避免部分字符串匹配导致的遗漏
  • 拆分规则为两组,分别处理通用无关目录和目标模型目录,提升可读性

2. 同步VSCode Jest插件忽略规则

若使用vscode-jest插件,需在VSCode设置中添加相同的忽略规则:

  1. 打开VSCode设置(快捷键Ctrl+,)
  2. 搜索jest.pathIgnorePatterns
  3. 添加正则:^(.*[\\\\/])?(mod92_|Mod92_)(.*)$及其他需忽略的目录规则

3. 额外优化方案(若上述方法仍无效)

  • 目录迁移+软链接:将mod92_*目录移至项目外部,通过Windows软链接(mklink /D 目标路径 源路径)访问,彻底避免Jest扫描
  • 添加modulePathIgnorePatterns:补充配置忽略这些目录作为模块导入,阻止Jest解析目录内文件:
    "modulePathIgnorePatterns": ["^(.*[\\\\/])?(mod92_|Mod92_)(.*)$"]
    

验证方式

执行jest --listTests命令,确认输出仅包含__tests__及未来新增的bin/js/__tests__下的测试文件,同时观察测试完成后的等待时间是否恢复正常。

内容的提问来源于stack exchange,提问作者Ross Boylan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 19:37:24