У меня проблема с переопределением провайдера в тестовом контексте. Я знаю, что упускаю что-то ослепительно очевидное, но я перепробовал множество перестановок, и ни одна из них не сработала, поэтому я отдаю это коллективному разуму.
У меня есть следующая структура:
общий.модуль.тс
@Module({
providers: [
DatabaseProvider,
ConfigService,
CacheService
],
exports: [
DatabaseProvider,
ConfigService
CacheService
],
imports: [HttpModule],
})
где DatabaseProvider определяется как:
const DatabaseProvider = {
provide: "MongoConnection",
inject: [ConfigService],
useFactory: async (config: ConfigService): Promise < typeof mongoose | Object > => {
return await mongoose.connect(config.getString("MONGO_URI"), { useNewUrlParser: true });
}
};
мой.модуль.тс
@Module({
imports: [SharedModule, HttpModule],
exports: [MyService],
controllers: [MyController],
providers: [MyService],
})
app.module.ts
@Module({
imports: [
SharedModule,
MyModule
],
providers: [
...
],
controllers: [
...
]
})
мой.service.ts
export class MyService {
constructor(
@Inject("MongoConnection") private readonly dbConnection: Connection,
private _cache: CacheService
) { }
...
}
мои.спецификации
let cacheService = {...};
this.db = {...};
const module = await Test.createTestingModule({
imports: [SharedModule, MyModule, HttpModule]
})
.overrideProvider(CacheService)
.useValue(cacheService)
.overrideProvider("MongoConnection")
.useValue(this.db)
.compile();
Моя проблема заключается в том, что CacheService, по-видимому, переопределяется (он использует redis-mock, определенный в cacheService, вместо реализации redis по умолчанию в CacheService), но MongoConnection нет - он все еще вызывает исходный DatabaseProvider из shared.module.ts .
Может ли кто-нибудь указать, что мне не хватает?
Ах, ты не используешь @nestjs/mongoose, верно? Что-нибудь говорит против использования этого пакета? github.com/nestjs/мангуст





Вы действительно используете
@Inject()вместо@InjectConnection()для внедрения соединения?