Предоставление "entryComponents" для TestBed

У меня есть компонент, который получает компонентный компонент компонента для динамического создания в качестве дочернего элемента.

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

Я пытаюсь написать unit test и передать некоторый TestComponent для его создания и рендеринга.

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

Есть листинг для "any", потому что configureTestingModule ожидает TestModuleMetadata, у которого нет entryComponents, но я получаю ошибку: "No component factory найдено для TestComponent".

Как я могу предоставить entryComponents для TestBed?

Ответ 1

Вы также можете сделать это непосредственно в своем тестовом файле, если хотите:

import { BrowserDynamicTestingModule } from '@angular/platform-browser-dynamic/testing'; // DO not forget to Import

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

Ответ 2

Хорошо, я понял это. В тесте вы должны определить новый модуль, в котором вы объявите свой макетный компонент, и укажите его как entryComponent.

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

И импортируйте его в TestBed

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

Я надеюсь, что это поможет кому-то:]