TypeOrm自定义仓库迁移至NestJs可注入提供者的测试问题
问题描述
已将TypeORM升级至0.3.12版本,@nestjs/typeorm升级至9.0.1版本,按参考方案完成所有自定义仓库迁移后,测试时将依赖添加至createTestingModule的providers元数据仍无法正常运行。怀疑dailyTaskRepository = module.get<TypeOrmDailyTaskRepository>(TypeOrmDailyTaskRepository)这行获取实例的代码已过时,但不清楚当前如何从模块中获取提供者实例。
环境版本
- TypeORM: 0.3.12
- @nestjs/typeorm: 9.0.1
测试代码
// daily-task.typeorm.inte.ts import { TypeOrmModule } from '@nestjs/typeorm' import { config } from '../../../config' import { Test } from '@nestjs/testing' import { TypeOrmDailyTaskRepository } from './daily-task.typeorm.repository' import { dailyTaskDataBuilder } from '../data-builders/daily-task.data-builder' import { DailyTask } from '../entities/daily-task.entity' import { TypeOrmExerciseRepository } from '../../exercise/repositories/type-orm-exercise.repository' import { TypeOrmAthleteRepository } from '../../athlete/repositories/typeorm-athlete.repository' import { TypeOrmProgramRepository } from '../../program/repositories/type-orm-program.repository' import { TypeOrmBiometricsRepository } from '../../biometrics/repositories/typeorm-biometrics.repository' import { TypeOrmExerciseTemplateRepository } from '../../exercise/repositories/type-orm-exercise-template.repository' import { TypeOrmWorkoutRepository } from '../../workout/repositories/workout.typeorm.repository' import { TypeOrmSessionRepository } from '../../session/repositories/session.typeorm.repository' import { TypeOrmPerformanceRepository } from '../../performance/repositories/performance.typeorm.repository' import { BaseEntity } from '../../__infrastructure__/typeorm/base.entity' const dailyTasksFixtures = [dailyTaskDataBuilder(), dailyTaskDataBuilder()] async function generateDailyTasksFixtures( dailyTaskRepository: TypeOrmDailyTaskRepository, ) { await dailyTaskRepository.save(dailyTasksFixtures) } describe('TypeOrm DailyTask Repository', () => { let dailyTaskRepository: TypeOrmDailyTaskRepository beforeAll(async () => { const module = await Test.createTestingModule({ imports: [TypeOrmModule.forRoot(config.db)], providers: [ TypeOrmAthleteRepository, TypeOrmBiometricsRepository, TypeOrmDailyTaskRepository, TypeOrmExerciseRepository, TypeOrmExerciseTemplateRepository, TypeOrmProgramRepository, TypeOrmWorkoutRepository, TypeOrmSessionRepository, TypeOrmPerformanceRepository, DailyTask, BaseEntity, ], }).compile() dailyTaskRepository = module.get<TypeOrmDailyTaskRepository>( TypeOrmDailyTaskRepository, ) await dailyTaskRepository.query('SET FOREIGN_KEY_CHECKS=0') await dailyTaskRepository.query(`DELETE FROM daily_task;`) await generateDailyTasksFixtures(dailyTaskRepository) }) afterAll(async () => { await dailyTaskRepository.query('SET FOREIGN_KEY_CHECKS=0') await dailyTaskRepository.query(`DELETE FROM daily_task;`) }) it('should be defined', () => { expect(dailyTaskRepository).toBeDefined() }) it('should get all daily tasks', async () => { const expectedDailyTasks = [ new DailyTask(dailyTasksFixtures[0]), new DailyTask(dailyTasksFixtures[1]), ] const retrievedDailyTasks = await dailyTaskRepository.getAll() expect(retrievedDailyTasks).toStrictEqual(expectedDailyTasks) }) })
控制台错误信息
yarn run v1.22.17 $ jest --testTimeout=10000 -c jest-inte.json --runInBand --forceExit src/daily-task/repositories/daily-task.typeorm.repository.inte.ts -t 'should be defined' FAIL src/daily-task/repositories/daily-task.typeorm.repository.inte.ts (5.365 s) TypeOrm DailyTask Repository ✕ should be defined (2 ms) ○ skipped should get all daily tasks ● TypeOrm DailyTask Repository › should be defined Nest无法解析DailyTask的依赖(?)。请确保索引[0]处的参数Object在RootTestModule上下文中可用。 可能的解决方案: - 如果Object是提供者,它是否属于当前RootTestModule? - 如果Object是从独立@Module导出的,该模块是否已在RootTestModule中导入? @Module({ imports: [ /* 包含Object的模块 */ ] }) at Injector.lookupComponentInParentModules (node_modules/@nestjs/core/injector/injector.js:188:19) at Injector.resolveComponentInstance (node_modules/@nestjs/core/injector/injector.js:144:33) at resolveParam (node_modules/@nestjs/core/injector/injector.js:98:38) at async Promise.all (index 0) at Injector.resolveConstructorParams (node_modules/@nestjs/core/injector/injector.js:113:27) at Injector.loadInstance (node_modules/@nestjs/core/injector/injector.js:46:9) at Injector.loadProvider (node_modules/@nestjs/core/injector/injector.js:68:9) at async Promise.all (index 12) at InstanceLoader.createInstancesOfProviders (node_modules/@nestjs/core/injector/instance-loader.js:43:9) at node_modules/@nestjs/core/injector/instance-loader.js:28:13 ● TypeOrm DailyTask Repository › should be defined expect(received).toBeDefined() 接收值:undefined 59 | 60 | it('should be defined', () => { > 61 | expect(dailyTaskRepository).toBeDefined() | ^ 62 | }) 63 | 64 | it('should get all daily tasks', async () => { at Object.<anonymous> (src/daily-task/repositories/daily-task.typeorm.repository.inte.ts:61:33) ● TypeOrm DailyTask Repository › should get all daily tasks Nest无法解析DailyTask的依赖(?)。请确保索引[0]处的参数Object在RootTestModule上下文中可用。 可能的解决方案: - 如果Object是提供者,它是否属于当前RootTestModule? - 如果Object是从独立@Module导出的,该模块是否已在RootTestModule中导入? @Module({ imports: [ /* 包含Object的模块 */ ] }) at Injector.lookupComponentInParentModules (node_modules/@nestjs/core/injector/injector.js:188:19) at Injector.resolveComponentInstance (node_modules/@nestjs/core/injector/injector.js:144:33) at resolveParam (node_modules/@nestjs/core/injector/injector.js:98:38) at async Promise.all (index 0) at Injector.resolveConstructorParams (node_modules/@nestjs/core/injector/injector.js:113:27) at Injector.loadInstance (node_modules/@nestjs/core/injector/injector.js:46:9) at Injector.loadProvider (node_modules/@nestjs/core/injector/injector.js:68:9) at async Promise.all (index 12) at InstanceLoader.createInstancesOfProviders (node_modules/@nestjs/core/injector/instance-loader.js:43:9) at node_modules/@nestjs/core/injector/instance-loader.js:28:13 Test Suites: 1 failed, 1 total Tests: 1 failed, 1 skipped, 2 total Snapshots: 0 total Time: 5.42 s, estimated 9 s Ran all test suites matching /src\/daily-task\/repositories\/daily-task.typeorm.repository.inte.ts/i with tests matching "should be defined". Force exiting Jest: Have you considered using `--detectOpenHandles` to detect async operations that kept running after all tests finished? error Command failed with exit code 1. info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command. ➜ back git:(migrate/typeorm) ✗
内容的提问来源于stack exchange,提问作者A Mehmeto
相关产品推荐
相关产品推荐

