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

NestJS单元测试运行报错:测试启动后无法添加hook,hook需同步定义

报错产生原因

该报错是Jest测试框架的核心运行规则限制导致,报错信息如下:

Cannot add a hook after tests have started running. Hooks must be defined synchronously.

Jest要求所有测试相关API(包括beforeEach/afterEach/describe/it等)必须在测试脚本同步执行阶段完成注册,不能在测试启动、异步逻辑执行之后再动态注册钩子。你提供的测试代码中beforeEach的位置是符合规则的,因此问题大概率是以下场景触发:

  • 测试文件内存在顶层await语句,顶层代码的异步执行会推迟后续钩子的注册时机,等Jest已经启动测试流程后才执行beforeEach注册逻辑,触发报错
  • 项目中存在多个版本的Jest依赖冲突
  • TypeScript转译配置错误,导致钩子注册逻辑被包裹到异步函数中延迟执行
解决方案

按照排查优先级依次尝试以下操作:

  • 检查当前测试文件的顶层作用域是否有await调用:
    • 如果存在,把顶层await逻辑迁移到beforeEach等测试钩子内部
    • 若确实需要使用顶层await,给Jest启动命令添加参数--experimental-vm-modules,同时在Jest配置中开启ESM支持
  • 消除Jest依赖版本冲突,执行对应包管理器的去重命令:
    # npm
    npm dedupe jest
    # pnpm
    pnpm dedupe jest
    # yarn
    yarn dedupe jest
    
  • 若使用TypeScript+ts-jest,确认tsconfig.json中target配置不低于ES2017,同时关闭不必要的惰性编译配置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 14:36:02