为TestBed提供“entryComponents”

时间:2017-01-05 11:25:24

标签: javascript unit-testing angular

我有一个组件,它接收组件的组件类,以动态创建为子组件。

let componentFactory = this.componentFactoryResolver.resolveComponentFactory(componentToCreate);
this.componentReference = this.target.createComponent(componentFactory);

我正在尝试编写单元测试并传递一些TestComponent来创建&渲染。

TestBed
  .configureTestingModule(<any>{
    declarations: [MyAwesomeDynamicComponentRenderer, TestHostComponent],
    entryComponents: [TestComponent],
  });

有“任意”的转换,因为configureTestingModule期望TestModuleMetadata没有entryComponents,但我收到错误:“找不到TestComponent的组件工厂”。

如何将entryComponents提供给TestBed

2 个答案:

答案 0 :(得分:50)

好的,我明白了。在测试中,您应该定义新模块,在其中声明模拟组件并将其指定为entryComponent

@NgModule({
  declarations: [TestComponent],
  entryComponents: [
    TestComponent,
  ]
})
class TestModule {}

并将其导入TestBed

TestBed
  .configureTestingModule({
    declarations: [ValueComponent, TestHostComponent],
    imports: [TestModule],
  });

我希望它会帮助某人:]

答案 1 :(得分:50)

如果您愿意,也可以直接在测试文件中进行:

TestBed.configureTestingModule({
  declarations: [ MyDynamicComponent ],
}).overrideModule(BrowserDynamicTestingModule, {
  set: {
    entryComponents: [ MyDynamicComponent ],
  }
});