Node.js overrideProvider(令牌)在Test.createTestingModule的nestJS中不工作
我在测试上下文中重写提供程序时遇到问题。我知道我漏掉了一些显而易见的东西,但我尝试了大量的排列,但没有一个有效,所以我要把这个告诉蜂群 我的结构如下: 共享的.module.tsNode.js overrideProvider(令牌)在Test.createTestingModule的nestJS中不工作,node.js,unit-testing,node-modules,code-injection,nestjs,Node.js,Unit Testing,Node Modules,Code Injection,Nestjs,我在测试上下文中重写提供程序时遇到问题。我知道我漏掉了一些显而易见的东西,但我尝试了大量的排列,但没有一个有效,所以我要把这个告诉蜂群 我的结构如下: 共享的.module.ts @Module({ providers: [ DatabaseProvider, ConfigService, CacheService ], exports: [ DatabaseProvider, ConfigS
@Module({
providers: [
DatabaseProvider,
ConfigService,
CacheService
],
exports: [
DatabaseProvider,
ConfigService
CacheService
],
imports: [HttpModule],
})
@Module({
imports: [SharedModule, HttpModule],
exports: [MyService],
controllers: [MyController],
providers: [MyService],
})
@Module({
imports: [
SharedModule,
MyModule
],
providers: [
...
],
controllers: [
...
]
})
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();
其中,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 });
}
};
应用程序模块.ts
@Module({
providers: [
DatabaseProvider,
ConfigService,
CacheService
],
exports: [
DatabaseProvider,
ConfigService
CacheService
],
imports: [HttpModule],
})
@Module({
imports: [SharedModule, HttpModule],
exports: [MyService],
controllers: [MyController],
providers: [MyService],
})
@Module({
imports: [
SharedModule,
MyModule
],
providers: [
...
],
controllers: [
...
]
})
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();
my.service.ts
@Module({
providers: [
DatabaseProvider,
ConfigService,
CacheService
],
exports: [
DatabaseProvider,
ConfigService
CacheService
],
imports: [HttpModule],
})
@Module({
imports: [SharedModule, HttpModule],
exports: [MyService],
controllers: [MyController],
providers: [MyService],
})
@Module({
imports: [
SharedModule,
MyModule
],
providers: [
...
],
controllers: [
...
]
})
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();
my.spec.ts
@Module({
providers: [
DatabaseProvider,
ConfigService,
CacheService
],
exports: [
DatabaseProvider,
ConfigService
CacheService
],
imports: [HttpModule],
})
@Module({
imports: [SharedModule, HttpModule],
exports: [MyService],
controllers: [MyController],
providers: [MyService],
})
@Module({
imports: [
SharedModule,
MyModule
],
providers: [
...
],
controllers: [
...
]
})
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似乎被覆盖(它使用CacheService中定义的redis mock,而不是CacheService中的默认redis实现),但MongoConnection没有被覆盖-它仍在从shared.module.ts调用原始DatabaseProvider
有人能指出我遗漏了什么吗?你真的用
@injection()
而不是@InjectConnection()
来注入连接吗?啊,你不是在用@nestjs/mongoose
,对吗?有人反对使用这个软件包吗?