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

Jest v27的afterEach()钩子中如何获取当前测试用例名称

解决方案

该报错是因为expect.getState 属于Jest未对外公开的内部API,官方TypeScript类型定义中未包含该方法的声明,所以TS编译阶段抛出类型错误,可通过以下三种方式解决:

方案1:临时绕过类型检查(快速验证用)

直接通过类型断言将expect转为any类型跳过校验,适合临时调试场景:

afterEach(() => {
  console.log(`Correlation ID: ${process.env.correlationId}`)
  console.log((expect as any).getState().currentTestName)
})

方案2:扩展全局类型声明(长期使用)

在项目的全局类型声明文件(如global.d.ts或jest.d.ts)中补充getState方法的类型定义:

declare module '@jest/expect' {
  interface Expect {
    getState(): {
      currentTestName: string;
      // 可按需补充其他需要用到的state属性
    }
  }
}

完成后确保该声明文件路径被包含在tsconfig.json的include数组中即可消除类型报错。

方案3:使用官方公开API(更稳妥,推荐)

jest-circus运行器支持在afterEach钩子的入参中直接获取当前测试用例的完整信息,无需依赖内部API:

import type { Test } from '@jest/reporters';

afterEach((test: Test) => {
  console.log(`Correlation ID: ${process.env.correlationId}`)
  // fullName 为包含所有describe层级的完整测试用例名称
  // 若仅需当前测试的名称可使用 test.title
  console.log(test.fullName)
})

该方案不依赖Jest内部未公开能力,版本兼容性更好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 20:24:04