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
相关产品推荐
相关产品推荐

