TestBed.overrideModule
是否替换以前添加的提供者?
我有一个Component
c1
,它使用动态创建的组件c2
。我读到我需要使用overrideModule
在entryComponents
中添加TestBed
条目。
所以我做到了
TestBed.configureTestingModule({
declarations: [ NewPracticeQuestionComponent,
DialogBoxComponent,
ShowErrorsComponent],
imports:[ReactiveFormsModule,HttpClientTestingModule],
providers:[WebToBackendInterfaceService,
HelperService,
AuthService,
{provide:QuestionManagementService, useClass:MockQuestionManagementService}] //NOTE I HAVE A DIFFERENT PROVIDER HERE
});
TestBed.overrideModule(BrowserDynamicTestingModule, {
set: {
entryComponents: [DialogBoxComponent]/*DialogBoxComponent is created dynamically (imperatively), soit nee to be ddded in entryComponent*/
}
});
TestBed.compileComponents();
以上,我提供了MockQuestionManagementService
作为QuestionManagementService
的其他提供者。但是我注意到,在创建组件时,Angular
创建了QuestionManagementService
!!
要解决此问题,我必须明确致电TestBed.overrideProvider
TestBed.configureTestingModule({
declarations: [ NewPracticeQuestionComponent,
DialogBoxComponent,
ShowErrorsComponent],
imports:[ReactiveFormsModule,HttpClientTestingModule],
providers:[WebToBackendInterfaceService,
HelperService,
AuthService,
{provide:QuestionManagementService, useClass:MockQuestionManagementService}]
});
TestBed.overrideModule(BrowserDynamicTestingModule, {
set: {
entryComponents: [DialogBoxComponent]/*DialogBoxComponent is created dynamically (imperatively), soit nee to be ddded in entryComponent*/
}
});
TestBed.overrideProvider(QuestionManagementService,{useValue: new MockQuestionManagementService},); //THIS ADDED EXPLICITLY
TestBed.compileComponents();
}));
现在Angular
添加了MockQuestionManagementService
。我是否错误地使用了overrideModule
或TestBed.overrideModule
的预期行为?
答案 0 :(得分:0)
问题不在于TestBed
,而是我配置providers
的方式。我在服务的@Injectable({ providedIn: 'root'})
文件而不是模块的.ts
中使用了.ts
。因此,即使我将TestModule
配置为使用提供的配置({provide:QuestionManagementService, useClass:MockQuestionManagementService}
),除非我通过调用{{ 1}}
尽管我仍然想知道为什么提供给QuestionManagementService
的配置不起作用。不是查找从组件到模块再到根的依赖关系吗?