web-dev-qa-db-fra.com

Fournir "entryComponents" pour un TestBed

J'ai un composant qui reçoit une classe de composants pour créer dynamiquement en tant qu'enfant.

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

J'essaie d'écrire un test unitaire et de passer un TestComponent pour qu'il puisse le créer et le rendre.

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

Il y a un cast vers "any" car configureTestingModule attend TestModuleMetadata qui n'a pas entryComponents mais j'obtiens une erreur: "Aucune fabrique de composants trouvée pour TestComponent".

Comment puis-je fournir le entryComponents à un TestBed?

35
Pavel Staselun

Vous pouvez également le faire directement dans votre fichier de test si vous le souhaitez:

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

D'accord, je l'ai compris. Dans le test, vous devez définir un nouveau module dans lequel vous déclarez votre composant fictif et le spécifier également comme entryComponent.

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

Et importez-le dans TestBed

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

J'espère que cela aidera quelqu'un:]

55
Pavel Staselun