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

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"
}

原生测试运行器实用技巧

  1. 钩子对应关系:Node原生测试的before/after等价于Jest的beforeAll/afterAll,若需每个测试用例前后执行逻辑,导入beforeEach/afterEach使用即可
  2. 异步简化处理:测试运行器会自动识别异步函数,无需手动调用done回调,直接返回Promise或使用async/await即可
  3. 测试用例过滤:通过--test-name-pattern参数快速筛选指定测试,例如:
    npm test -- --test-name-pattern="POST signup"
    
  4. 覆盖率统计:原生测试器无内置覆盖率工具,可搭配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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 18:52:26