Node.js测试场景下Nest无法解析MyRepository依赖问题求助
解决Nest测试中MyRepository的DataSource依赖注入问题
错误原因:MyRepository的构造函数依赖DataSource,但当前测试模块未注册该依赖,导致Nest无法解析。
以下是两种可行的解决方式:
方式一:使用真实测试数据库的DataSource
在测试模块中导入TypeOrmModule并配置内存数据库,让Nest自动提供合法的DataSource实例:
beforeEach(async () => { const module: TestingModule = await Test.createTestingModule({ controllers: [MyController], providers: [MyService, MyRepository], imports: [ TypeOrmModule.forRoot({ type: 'sqlite', database: ':memory:', entities: [MyData], synchronize: true, dropSchema: true, }), ], }).compile(); });
这种方式会创建临时内存数据库,适合需要验证真实数据库操作逻辑的测试场景。
方式二:模拟DataSource(单元测试场景)
若无需真实数据库交互,可手动模拟DataSource实例,避免依赖外部数据库:
方案1:直接提供模拟的DataSource
beforeEach(async () => { // 模拟DataSource的必要方法 const mockDataSource = { createEntityManager: jest.fn().mockReturnValue({ // 按需模拟实体管理器的方法,比如find、save等 }), }; const module: TestingModule = await Test.createTestingModule({ controllers: [MyController], providers: [ MyService, MyRepository, { provide: DataSource, useValue: mockDataSource }, ], }).compile(); });
方案2:通过工厂函数创建Repository实例
beforeEach(async () => { const mockDataSource = { createEntityManager: jest.fn(), }; const module: TestingModule = await Test.createTestingModule({ controllers: [MyController], providers: [ MyService, { provide: MyRepository, useFactory: () => new MyRepository(mockDataSource as unknown as DataSource), }, ], }).compile(); });
这两种模拟方式适合单元测试,专注验证Repository本身的逻辑,无需启动真实数据库。
内容的提问来源于stack exchange,提问作者Code Guru
相关产品推荐
相关产品推荐

