Angular 2 TestModuleMetadata没有EntryComponents属性

时间:2017-02-22 17:12:12

标签: unit-testing angular typescript angular-cli

我正在使用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?

1 个答案:

答案 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();
  }));