【发布时间】: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