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

NestJS+ts-jest端到端测试枚举值读取undefined问题求助

解决NestJS ts-jest E2E测试中枚举值undefined问题

问题分析

API正常运行时枚举ShapeUnits、ShapeDimensions可正常访问,但执行E2E测试时出现枚举未定义错误,核心原因是jest模块解析逻辑与项目实际模块路径映射不匹配,导致测试环境下枚举模块未被正确加载或编译。

解决方案

1. 对齐TS配置与Jest模块映射

确保tsconfig.spec.json的路径映射与jest.config.ts的moduleNameMapper完全匹配,消除解析歧义:

调整tsconfig.spec.json的paths配置:

{
  "compilerOptions": {
    // 其他配置...
    "paths": {
      "@image-service/api/*": ["../api/src/*"],
      "@image-service/api-business/*": ["../../libs/api-business/src/*"]
    }
  }
}

更新jest.config.ts的moduleNameMapper:

将原有的直接指向index.ts改为通配符匹配,确保所有子模块都能被正确解析:

moduleNameMapper: {
  "@image-service/api/(.*)": "<rootDir>/../api/src/$1",
  "@image-service/api-business/(.*)": "<rootDir>/../../libs/api-business/src/$1"
},

2. 确保Jest正确转换Libs目录文件

在jest.config.ts的transform配置中,明确指定需要转换的文件范围,避免Libs目录下的TS文件未被ts-jest处理:

transform: {
  '^.+\\.[tj]s$': [
    'ts-jest',
    {
      tsconfig: '<rootDir>/tsconfig.spec.json',
      // 针对monorepo跨包依赖,开启isolatedModules确保独立编译
      isolatedModules: true
    },
  ],
},
// 可选:添加transformInclude确保Libs目录被覆盖
transformInclude: [
  '<rootDir>/../api/src/**/*',
  '<rootDir>/../../libs/api-business/src/**/*'
]

3. 清除Jest缓存

缓存可能导致旧的编译文件干扰测试,执行以下命令清除缓存后重新运行测试:

npx jest --clearCache
npm run e2e:api

4. 检查枚举导入与导出方式

确保枚举在定义文件中正确导出,且在Joi Schema中使用别名路径导入:

枚举定义文件(示例):

// @image-service/api-business/src/enums/shape.enums.ts
export enum ShapeUnits {
  PIXEL = 'PIXEL'
}

export enum ShapeDimensions {
  WIDTH = 'WIDTH',
  HEIGHT = 'HEIGHT'
}

Schema文件中的导入:

import { ShapeUnits, ShapeDimensions } from '@image-service/api-business/enums/shape.enums';

5. 强制初始化枚举模块(可选)

若上述方案无效,可在test-setup.ts中提前导入枚举模块,确保测试启动时枚举已被初始化:

// src/support/test-setup.ts
import '@image-service/api-business/enums/shape.enums';

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 16:46:20