NestJS项目使用Node.js原生测试运行器的问题求助
解决NestJS中使用Node.js原生测试运行器的两类问题
问题1:无法批量运行测试文件
原脚本仅会识别./test目录下的.js文件,不会递归匹配.ts测试文件。修改脚本为glob路径匹配模式,明确指定所有测试文件的路径规则:
"scripts": { "test": "node -r tsconfig-paths/register -r ts-node/register --test ./test/**/*.test.ts" }
配套注意事项
- 确保Node.js版本≥18(原生测试运行器
--test从Node 18开始进入稳定支持阶段) - 检查
tsconfig.json核心配置:module设置为CommonJS或NodeNext(与项目模块系统保持一致)rootDir和outDir路径配置准确,避免ts-node路径解析异常
问题2:assert默认导入出现未定义报错
报错根源是TypeScript模块解析规则未适配Node.js的ES模块导出逻辑,可通过以下两种方案解决:
方案1:调整tsconfig配置
在tsconfig.json的compilerOptions中添加/修改以下配置:
{ "compilerOptions": { "moduleResolution": "NodeNext", "allowSyntheticDefaultImports": true, "esModuleInterop": true } }
配置完成后即可使用偏好的默认导入方式:
import assert from "node:assert"; // 或 import assert from "node:assert/strict";
方案2:替换ts-node为tsx(可选)
tsx对ES模块的兼容性更友好,无需额外配置即可支持默认导入。先安装依赖:
npm install -D tsx
再修改测试脚本:
"scripts": { "test": "node -r tsconfig-paths/register --loader tsx --test ./test/**/*.test.ts" }
原生测试运行器实用技巧
- 钩子对应关系:Node原生测试的
before/after等价于Jest的beforeAll/afterAll,若需每个测试用例前后执行逻辑,导入beforeEach/afterEach使用即可 - 异步简化处理:测试运行器会自动识别异步函数,无需手动调用
done回调,直接返回Promise或使用async/await即可 - 测试用例过滤:通过
--test-name-pattern参数快速筛选指定测试,例如:npm test -- --test-name-pattern="POST signup" - 覆盖率统计:原生测试器无内置覆盖率工具,可搭配
c8实现:
脚本修改为:npm install -D c8"scripts": { "test": "c8 node -r tsconfig-paths/register -r ts-node/register --test ./test/**/*.test.ts", "test:coverage": "c8 --report=lcov npm test" }
内容的提问来源于stack exchange,提问作者Gabriel Borges
相关产品推荐
相关产品推荐

