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

如何测试TypeScript非导出模块?测试出现ReferenceError报错求助

问题修复方案

问题原因

你使用的是TypeScript旧版的**内部模块(namespace)**语法(module关键字),虽然编译时TypeScript能识别同模块内的成员,但测试运行环境(如Jest)无法正确处理这种模块的运行时作用域,导致抛出ReferenceError: myFunction is not defined错误。


修复方案

方案一:改用现代ES模块语法(推荐)

这是当前TypeScript的标准写法,兼容性更好:

  1. 修改File1.ts为ES模块:
export function myFunction(): string {
  return "Hello, World!";
}
  1. 修改测试文件File1.test.ts,直接导入目标函数:
import { myFunction } from './File1';

describe('Test1', () => {
  test('equal', () => {
    expect(myFunction()).toBe("Hello, World!");
  });
});
  1. 确保tsconfig.json的核心配置:
{
  "module": "CommonJS", // 或ESNext,根据测试环境选择
  "moduleResolution": "node",
  "files": [
    "File1.test.ts",
    "File1.ts"
  ]
}

方案二:保留内部模块语法(仅兼容旧代码)

如果必须沿用旧的module/namespace写法,需要从全局作用域明确访问模块成员:

  1. 可选:将File1.ts的module替换为更清晰的namespace(TypeScript官方推荐):
namespace MyModule {
  export function myFunction(): string {
    return "Hello, World!";
  }
}
  1. 修改测试文件File1.test.ts,直接通过全局的MyModule调用函数:
describe('Test1', () => {
  test('equal', () => {
    expect(MyModule.myFunction()).toBe("Hello, World!");
  });
});

(注:编译后MyModule会挂载到全局作用域,因此可以直接访问)


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 08:35:11