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

Express+TypeORM+Jest环境下User实体元数据未找到错误求助

解决Jest测试时TypeORM的EntityMetadataNotFoundError问题

可能的原因及解决方案

1. 实体导入方式错误

你的user.entity.ts使用了默认导出(export default User),但在app-data-source.ts中用了解构导入(import { User } from "./entity"),这会导致导入的User为undefined,TypeORM无法识别实体元数据。

修复方式:

  • 如果entity文件夹有index.ts,确保它正确导出实体:
    // entity/index.ts
    import User from './user.entity';
    export { User };
    
  • 或者直接修改app-data-source.ts的导入语句为默认导入:
    // app-data-source.ts
    import User from "./entity/user.entity"; // 直接导入实体文件,而非文件夹
    

2. Jest测试未正确初始化DataSource

Postman运行时,你的应用会提前初始化AppDataSource,但Jest测试是独立执行的,可能在实体元数据加载完成前就调用了Repository。

修复方式:
创建Jest全局配置文件(如jest.setup.ts),确保测试前完成DataSource初始化:

// jest.setup.ts
import { AppDataSource } from './src/app-data-source';

beforeAll(async () => {
  if (!AppDataSource.isInitialized) {
    await AppDataSource.initialize();
  }
});

afterAll(async () => {
  await AppDataSource.destroy(); // 测试结束后销毁连接,避免资源泄漏
});

然后在jest.config.js中配置:

module.exports = {
  preset: 'ts-jest',
  testEnvironment: 'node',
  setupFilesAfterEnv: ['./jest.setup.ts'], // 引入全局配置
  transform: {
    '^.+\\.tsx?$': 'ts-jest',
  },
};

3. 实体配置改用路径扫描(更可靠)

直接导入实体容易出现模块解析问题,改用路径扫描让TypeORM自动加载实体:

// app-data-source.ts
export const AppDataSource = new DataSource({
  // ...其他配置
  entities: [__dirname + '/entity/**/*.entity.ts'], // 扫描entity文件夹下所有实体文件
  // 生产环境可改用编译后的js文件:entities: [__dirname + '/entity/**/*.entity.js']
});

4. 检查Jest的模块解析配置

确保Jest能正确解析TypeScript模块,在jest.config.js中添加:

module.exports = {
  // ...其他配置
  moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'],
  moduleNameMapper: {
    '^@/(.*)$': '<rootDir>/src/$1', // 如果使用了路径别名,需要对应配置
  },
};

验证步骤

  1. 修复导入语句后,先单独运行AppDataSource.initialize()测试是否能成功连接数据库
  2. 运行单个Jest测试,确认元数据错误是否消失
  3. 若仍有问题,打印AppDataSource.entityMetadatas查看是否包含User实体的元数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 08:25:56