Windows环境下Node.js TS项目Mocha测试配置报错求助
Node.js + Mocha测试配置故障排查(Windows + pnpm)
环境信息
- Node.js 18.14.0
- pnpm 8.14.0
- Windows 操作系统
- 背景:Python转Node.js开发,正在构建REST API,配置Mocha自动化测试
问题1:使用swc-node加载器执行测试失败
package.json中的test命令
"test": "cross-env SWCRC=true NODE_OPTIONS='--loader @swc-node/register/esm' mocha ./src/tests/**/*.test.ts"
执行pnpm test后的错误日志
> cross-env SWCRC=true NODE_OPTIONS='--loader @swc-node/register/esm' mocha ./src/tests/**/*.test.ts The system cannot find the path specified. node:events:491 throw er; // Unhandled 'error' event ^ Error: spawn @swc-node\register\esm ENOENT at notFoundError (PATH_TO_FOLDER\Nodejs_tutorials\node_modules\.pnpm\cross-spawn@7.0.3\node_modules\cross-spawn\lib\enoent.js:6:26) at verifyENOENT (PATH_TO_FOLDER\Nodejs_tutorials\node_modules\.pnpm\cross-spawn@7.0.3\node_modules\cross-spawn\lib\enoent.js:40:16) at cp.emit (PATH_TO_FOLDER\Nodejs_tutorials\node_modules\.pnpm\cross-spawn@7.0.3\node_modules\cross-spawn\lib\enoent.js:27:25) at ChildProcess._handle.onexit (node:internal/child_process:291:12) Emitted 'error' event on ChildProcess instance at: at cp.emit (PATH_TO_FOLDER\Nodejs_tutorials\node_modules\.pnpm\cross-spawn@7.0.3\node_modules\cross-spawn\lib\enoent.js:30:37) at ChildProcess._handle.onexit (node:internal/child_process:291:12) { code: 'ENOENT', errno: 'ENOENT', syscall: 'spawn @swc-node\\register\\esm', path: '@swc-node\\register\\esm', spawnargs: [ 'mocha', './src/tests/**/*.test.ts' ] } Node.js v18.14.0 ELIFECYCLE Test failed. See above for more details.
问题2:改用ts-node加载器执行测试失败
执行命令
pnpm mocha --loader ts-node/esm .\src\tests\handlers\user.handler.test.ts
错误日志
PS PATH_TO_FOLDER\Nodejs_tutorials> pnpm mocha --loader ts-node/esm .\src\tests\handlers\user.handler.test.ts (node:9336) ExperimentalWarning: Custom ESM Loaders is an experimental feature and might change at any time (Use `node --trace-warnings ...` to show where the warning was created) node:internal/errors:490 ErrorCaptureStackTrace(err); ^ Error [ERR_UNSUPPORTED_ESM_URL_SCHEME]: Only URLs with a scheme in: file and data are supported by the default ESM loader. On Windows, absolute paths must be valid file:// URLs. Received protocol 'c:' at new NodeError (node:internal/errors:399:5) at throwIfUnsupportedURLScheme (node:internal/modules/esm/resolve:1059:11) at defaultResolve (node:internal/modules/esm/resolve:1135:3) at nextResolve (node:internal/modules/esm/loader:163:28) at ESMLoader.resolve (node:internal/modules/esm/loader:838:30) at ESMLoader.getModuleJob (node:internal/modules/esm/loader:424:18) at ESMLoader.import (node:internal/modules/esm/loader:525:22) at initializeLoader (node:internal/process/esm_loader:75:58) at loadESM (node:internal/process/esm_loader:90:11) at runMainESM (node:internal/modules/run_main:55:21) { code: 'ERR_UNSUPPORTED_ESM_URL_SCHEME' } Node.js v18.14.0
附:配置文件
(以下为示例框架,请补充实际配置内容)
package.json 示例片段
{ "type": "module", "scripts": { "test": "..." }, "devDependencies": { "mocha": "^10.2.0", "@swc-node/register": "^1.6.8", "cross-env": "^7.0.3", "ts-node": "^10.9.1", "typescript": "^5.3.3" } }
tsconfig.json 示例片段
{ "compilerOptions": { "target": "ES2020", "module": "ESNext", "moduleResolution": "NodeNext", "esModuleInterop": true, "skipLibCheck": true, "strict": true, "outDir": "./dist" }, "include": ["src/**/*"] }
解决思路
针对问题1(swc-node ENOENT错误)
- 修正Windows引号语法:Windows cmd不支持单引号包裹环境变量值,将
NODE_OPTIONS的单引号改为转义双引号,修改test命令为:"test": "cross-env SWCRC=true NODE_OPTIONS=\"--loader @swc-node/register/esm\" mocha ./src/tests/**/*.test.ts" - 确认依赖完整性:执行
pnpm add -D @swc-node/register @swc/core,确保swc相关依赖正确安装 - 清理pnpm缓存:执行
pnpm store prune清除缓存,再运行pnpm install重新安装所有依赖,避免缓存导致的依赖缺失
针对问题2(ts-node URL Scheme错误)
- 统一路径分隔符:Windows下使用正斜杠替代反斜杠,修改测试命令为:
pnpm mocha --loader ts-node/esm ./src/tests/handlers/user.handler.test.ts - 配置ESM支持:确保
package.json中设置"type": "module",tsconfig.json中设置"module": "ESNext"和"moduleResolution": "NodeNext",统一TypeScript和Node.js的模块规范 - 添加ts-node配置:创建
ts-node.config.json或在tsconfig.json中添加ESM支持:{ "esm": true, "experimentalSpecifierResolution": "node" }
内容的提问来源于stack exchange,提问作者Compphys
相关产品推荐
相关产品推荐

