Providing "entryComponents" for a TestBed

JavascriptUnit TestingAngular

Javascript Problem Overview


I have a component which receives a component class of component to dynamically create as a child.

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

I'm trying to write a unit test and pass some TestComponent for it to create & render.

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

There is casting to "any" because configureTestingModule expects TestModuleMetadata which doesn't have entryComponents but I get error: "No component factory found for TestComponent".

How can I provide the entryComponents to a TestBed?

Javascript Solutions


Solution 1 - Javascript

You can also do it into your test file directly if you want :

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

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

Solution 2 - Javascript

Okay, I figured it out. In the test you should define new module where you declare your mock component and specify it as an entryComponent too.

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

And import it into TestBed

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

I hope it will help someone :]

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionPavel StaselunView Question on Stackoverflow
Solution 1 - JavascriptAlexView Answer on Stackoverflow
Solution 2 - JavascriptPavel StaselunView Answer on Stackoverflow