Node.js 在NestJS中模拟多个TypeORM存储库
我很难在NestJS中模拟来自不同模块的多个存储库 我正在另一个模块服务(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
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));
});