web-dev-qa-db-ja.com

TestBedに「entryComponents」を提供する

コンポーネントのコンポーネントクラスを受け取って、子として動的に作成するコンポーネントがあります。

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

ユニットテストを作成し、TestComponentを渡して作成およびレンダリングしようとしています。

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

configureTestingModuleTestModuleMetadataを持たないentryComponentsを期待するため、「any」へのキャストがありますが、「TestComponentのコンポーネントファクトリが見つかりません」というエラーが表示されます。

entryComponentsTestBedに提供するにはどうすればよいですか?

35
Pavel Staselun

必要に応じて、テストファイルに直接実行することもできます。

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

さて、私はそれを理解しました。テストでは、モックコンポーネントを宣言する新しいモジュールを定義し、entryComponentとして指定する必要があります。

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

そして、それをTestBedにインポートします

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

私はそれが誰かを助けることを願っています:]

55
Pavel Staselun