У меня проблема с переопределением поставщика в тестовом контексте.Я знаю, что упускаю что-то ослепительно очевидное, но я пробовал множество перестановок, и ни одна из них не сработала, поэтому я обращаю это внимание на улей.
У меня есть следующая структура:
shared.module.ts
@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 });
}
};
my.module.ts
@Module({
imports: [SharedModule, HttpModule],
exports: [MyService],
controllers: [MyController],
providers: [MyService],
})
app.module.ts
@Module({
imports: [
SharedModule,
MyModule
],
providers: [
...
],
controllers: [
...
]
})
my.service.ts
export class MyService {
constructor(
@Inject("MongoConnection") private readonly dbConnection: Connection,
private _cache: CacheService
) { }
...
}
my.spec.ts
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.
Может кто-нибудь указать, что мне не хватает?