无法使用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
- Mac/Linux环境命令:
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
相关产品推荐
相关产品推荐

