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

无法使用Jest运行TypeScript测试 @polkadot包出现import语法报错

问题解决方案

核心错误原因

你遇到的报错本质是@polkadot系列依赖采用ESM规范发布,而Jest默认运行在CommonJS模式下,未对该依赖做正确的ESM转译处理,直接识别到ESM专属的import语法触发报错。
首先请确认你的tsconfig.json中compilerOptions.module字段配置为ESNext或NodeNext,这是TS支持ESM模块的基础要求。

Jest 适配方案

  • 第一步:修改package.json配置,新增字段声明项目为ESM模块:
{
  "type": "module"
}
  • 第二步:调整jest.config.ts配置,完整调整后的配置如下:
/** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */
import type { Config } from "@jest/types";

const config: Config.InitialOptions = {
  roots: ["./"],
  preset: "ts-jest/presets/default-esm", // 替换为ESM专属预设
  coverageDirectory: "../coverage",
  verbose: true,
  testEnvironment: "node",
  testMatch: ["**/?(*.)+(test).ts"],
  resetMocks: true,
  clearMocks: true,
  extensionsToTreatAsEsm: [".ts"],
  // 新增transform配置,开启ts-jest的ESM支持
  transform: {
    "^.+\\.tsx?$": ["ts-jest", { useESM: true }]
  },
  // 补充需要转译的ESM依赖,除了@polkadot还要包含其依赖的babel esm模块
  transformIgnorePatterns: ["node_modules/(?!(@polkadot|@babel/runtime/helpers/esm)/)"],
};
export default config;
  • 第三步:调整测试启动命令,添加Node的ESM实验特性支持:
    • Mac/Linux环境命令:NODE_OPTIONS="--experimental-vm-modules" jest --config src/test/jest.config.ts --detectOpenHandles
    • Windows环境命令:set NODE_OPTIONS=--experimental-vm-modules && jest --config src/test/jest.config.ts --detectOpenHandles

TAP 适配方案

  • 第一步:同样先在package.json中添加"type": "module"字段
  • 第二步:安装TAP的TypeScript支持依赖:npm install @tapjs/typescript --save-dev
  • 第三步:在package.json中新增TAP配置:
{
  "tap": {
    "extends": "@tapjs/typescript",
    "tsconfig": "./tsconfig.json",
    "node-arg": ["--experimental-specifier-resolution=node"]
  }
}
  • 第四步:添加测试启动命令:tap src/test/**/*.test.ts,直接运行即可支持异步TS测试

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 02:33:00