javascript单元测试慢需从执行环境、测试写法、依赖模拟三层面排查:检查并发配置(如禁用--runinband)、避免真实i/o、精准mock、提取重复数据、关闭覆盖率收集。

JavaScript 单元测试执行缓慢,通常不是“某一个测试慢”,而是整体结构或单个测试中隐藏了低效模式。排查要从执行环境、测试写法、依赖模拟三个层面入手,而不是盲目加日志或等超时。
看测试运行器是否启用并发
串行执行是最大隐形瓶颈。比如 Jest 默认并行,但若配置了 --runInBand 或误用 test.concurrent 以外的同步写法,就退化为单线程。
- 检查命令行参数:去掉
--runInBand、--maxWorkers=1等限制项 - 确认测试文件间无共享状态(如全局变量、未清理的 mock)——否则并发会出错,框架可能自动降级为串行
- AVA 用户可直接受益:它默认并发且强制隔离,迁移后常有 3–4 倍提速
查单个测试是否引入真实 I/O 或延迟
单元测试本该毫秒级完成,一旦出现秒级耗时,大概率在读文件、调 API、等定时器或渲染 DOM。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 搜索关键词:
fetch、fs.readFileSync、setTimeout、await new Promise、document.createElement - 用
console.time快速定位慢点:
在 test 函数开头加console.time('test-name'),结尾加console.timeEnd('test-name') - 真实请求必须被拦截:Jest 用
jest.mock('node:fs'),或用msw拦截 fetch;不要让测试连本地 mock server
验 mock 是否过度或失效
mock 写得不干净,反而拖慢速度甚至掩盖问题。常见情况是 mock 了整个模块却只用其中一两个方法,或 mock 后没恢复导致后续测试受影响。
- 避免
jest.mock('./utils')全量 mock,改用jest.mock('./utils', () => ({ format: jest.fn() })) - 检查是否漏掉
jest.clearAllMocks()或jest.restoreAllMocks(),尤其在beforeEach/afterEach中 - 慎用
jest.useFakeTimers():开启后所有定时器被接管,若忘记jest.runAllTimers()或jest.advanceTimersByTime(),测试会卡住
测测试本身是否在做冗余工作
有些测试看似简单,实则反复初始化大型对象、重复解析同一份 JSON、或在循环里创建大量实例。
- 把重复数据提取到
const常量,而非每次 test 里JSON.parse(...) - 避免在
it里写 for 循环跑 100 次断言——拆成 100 个独立it,让 runner 并发跑,或用test.each - 禁用覆盖率收集临时提速:
jest --coverage=false,再对比耗时变化(覆盖率报告本身开销不小)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










