2017-01-05 12 views
10

Mam komponent, który otrzymuje klasę komponentu komponentu do dynamicznego tworzenia jako dziecko.Udostępnianie "entryComponents" dla TestBed

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

Próbuję napisać badanej jednostki i przekazać jakąś TestComponent na to, aby tworzyć & render.

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

Nie rzuca się do „każdego”, ponieważ oczekuje TestModuleMetadataconfigureTestingModule która nie ma entryComponents, ale pojawia się błąd: „Nie znaleziono fabryki komponentów dla TestComponent”.

Jak mogę dostarczyć entryComponents do TestBed?

Odpowiedz

21

Okej, wymyśliłem to. W teście powinieneś zdefiniować nowy moduł, w którym deklarujesz swój fałszywy komponent i określić go jako entryComponent.

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

i zaimportować go do TestBed

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

Mam nadzieję, że to pomoże ktoś:]

+0

Bardzo mi to pomogło, dziękuję! – trichetriche

+0

tak! to działa!! Dziękuję bardzo!! – llstarscreamll

+0

Jeśli tylko StackOverflow pozwoli Ci odpowiedzieć na odpowiedź więcej niż jeden raz! –

9

Można również zrobić go w pliku testowego bezpośrednio, jeśli chcesz:

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

Jest to prawdopodobnie najbardziej poprawny sposób na zrobienie tego. – MBielski