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

如何扩展Jest全局命名空间添加自定义函数?运行时报错排查

问题原因与解决方法

核心问题

你当前的代码只是通过export namespace jest在模块内部声明了一个局部的jest命名空间,并没有把自定义函数挂载到全局的jest运行时对象上。TypeScript的类型声明让编译通过了,但实际运行时全局jest对象并没有这个方法,所以报错TypeError: jest.spyOnSomething is not a function。

修正步骤

修改jest-helpers.ts的实现部分,直接将自定义函数添加到全局jest对象上:

// jest-helpers.ts

declare global {
    namespace jest {
        function spyOnSomething(...args: any[]): SomeType;
    }
}

// 直接扩展全局jest对象,而非导出局部命名空间
(jest as any).spyOnSomething = function(...args: any[]): SomeType {
    // 写入你的函数实现逻辑
    // 示例:
    // return jest.fn(() => {/* 自定义逻辑 */}) as SomeType;
};

export {};

补充说明

  1. 类型声明部分(declare global内的namespace jest)是正确的,它告诉TypeScript全局jest对象存在该方法,保证编译阶段不报错。
  2. 实现部分必须直接修改全局jest对象:运行时的jest是Node.js环境下的全局对象,并非TypeScript的命名空间,因此不能通过导出命名空间的方式添加方法。
  3. 确保setupJest.ts在Jest配置中正确指定:在jest.config.js里设置setupFilesAfterEnv: ['./setupJest.ts'],这样测试执行前会自动加载辅助文件,保证自定义函数被挂载到全局jest上。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 08:02:38