Node.js 在NestJS中模拟多个TypeORM存储库

Node.js 在NestJS中模拟多个TypeORM存储库,node.js,testing,dependency-injection,nestjs,typeorm,Node.js,Testing,Dependency Injection,Nestjs,Typeorm,我很难在NestJS中模拟来自不同模块的多个存储库 我正在另一个模块服务(NotesService)中使用来自UsersModule的UsersRepository)。代码运行良好,但我无法使单元测试正常工作 我有以下错误:error:Nest无法解析UserRepository(?)的依赖项。请确保索引[0]处的参数连接在TypeOrmModule上下文中可用。 最小繁殖 以下是我的单元测试配置: /[notes.service.spec.ts] beforeach(异步()=>{ const

我很难在NestJS中模拟来自不同模块的多个存储库

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

我有以下错误:
error:Nest无法解析UserRepository(?)的依赖项。请确保索引[0]处的参数连接在TypeOrmModule上下文中可用。

最小繁殖 以下是我的单元测试配置:
/[notes.service.spec.ts]
beforeach(异步()=>{
const module=await Test.createTestingModule({
导入:[UsersModule],
供应商:[
NotesService,
{提供:getRepositoryToken(注意),useFactory:repositoryMockFactory},
{提供:getRepositoryToken(用户),useFactory:repositoryMockFactory},
],
}).compile();
notesService=module.get(notesService);
notesRepositoryMock=module.get(getRepositoryToken(Note));
});
问题是我无法对来自另一个模块的
UsersRepository
进行适当的模拟


我试着直接在测试内部导入
TypeOrmModule
,我能做的一切我都做不到。

如果你直接提供
NotesService
和它所依赖的模拟,你不需要导入
UsersModule
。出现错误的原因是Nest试图从
UsersModule
解析
TypeormModule.forFeature([User])
。只要在测试中删除导入,您就应该是金色的

// [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));
  });