我正在使用Angular CLI 1.0.0-beta.32.2并正在为Angular 2服务编写单元测试,该服务动态创建一个Component并将其插入另一个Component。
在我的单元测试中,我尝试创建一个模拟组件来测试我的服务,但是ng test
的输出会抛出一个错误,说明我的模拟组件是在entryComponents
属性中指定的。当我尝试将Component添加到TestModuleMetadata对象的entryComponents
属性中时,如下所示:TestBed.createTestingModule({...entryComponents: [ TestDialogComponent ]...})
我看到以下错误,指出entryComponents
属性不存在。
Chrome 56.0.2924 (Windows 10 0.0.0) DialogService should create a child component when opening FAILED
Error: No component factory found for TestDialogComponent. Did you add it to @NgModule.entryComponents?
查看TestModuleMetadata定义显示entryComponents属性不存在。那么我如何在Angular 2和Jasmine的单元测试中动态创建一个Component?
答案 0 :(得分:1)
选中TestBed.overrideModule
。请参考此讨论
https://github.com/angular/angular/issues/12079
我的DialogBoxComponent
出现错误。我的解决方法如下
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ NewPracticeQuestionComponent,
DialogBoxComponent,
ShowErrorsComponent],
imports:[ReactiveFormsModule,HttpClientTestingModule],
providers:[WebToBackendInterfaceService,HelperService,AuthService]
})
TestBed.overrideModule(BrowserDynamicTestingModule, {
set: {
entryComponents: [DialogBoxComponent]
}
})
.compileComponents();
}));