【问题标题】:Mock multiple TypeORM repositories in NestJS在 NestJS 中模拟多个 TypeORM 存储库
【发布时间】:2020-04-19 19:23:27
【问题描述】:

我无法在 NestJS 中模拟来自不同模块的多个存储库。

我在另一个模块服务 (NotesService) 中使用来自 UsersModule 的 UsersRepository。代码运行良好,但我无法使单元测试正常运行。

我有以下错误:Error: Nest can't resolve dependencies of the UserRepository (?). Please make sure that the argument Connection at index [0] is available in the TypeOrmModule context.

最小复制

// [users.module.ts]

@Module({
  imports: [TypeOrmModule.forFeature([User])],
  controllers: [UsersController],
  providers: [UsersService],
  exports: [UsersService],
})
export class UsersModule {}


// [users.service.ts]

@Injectable()
export class UsersService {
  constructor(@InjectRepository(User) private usersRepository: UsersRepository) {}
  ...
}


// [notes.module.ts]

@Module({
  imports: [
    TypeOrmModule.forFeature([Note, User]),
    UsersModule,
  ],
  controllers: [NotesController],
  providers: [NotesService],
})
export class NotesModule {
}

// [notes.service.ts]

@Injectable()
export class NotesService {
  constructor(
    @InjectRepository(Note) private notesRepository: NotesRepository,
    @InjectRepository(User) private usersRepository: UsersRepository,
  ) {}
  ...
}

这是我的单元测试配置:

// [notes.service.spec.ts]

beforeEach(async () => {
    const module = await Test.createTestingModule({
      imports: [UsersModule],
      providers: [
        NotesService,
        { provide: getRepositoryToken(Note), useFactory: repositoryMockFactory },
        { provide: getRepositoryToken(User), useFactory: repositoryMockFactory },
      ],
    }).compile();

    notesService = module.get<NotesService>(NotesService);
    notesRepositoryMock = module.get(getRepositoryToken(Note));
  });

问题是我无法正确模拟来自另一个模块的UsersRepository。

我尝试在测试中直接导入TypeOrmModule,尽我所能,但我无法让它工作。

【问题讨论】:

    标签: node.js testing dependency-injection nestjs typeorm


    【解决方案1】:

    如果您直接提供NotesService 和它将依赖的模拟,则不需要import UsersModule。错误的原因是 Nest 试图从 UsersModule 解析 TypeormModule.forFeature([User])。只需在测试中删除导入,您就应该很成功了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-05
      • 2019-11-20
      • 2022-08-05
      • 2022-01-02
      • 2022-08-19
      • 2023-02-03
      • 2021-07-15
      相关资源
      最近更新 更多