2017-01-05 1 views
10

동적으로 자식으로 생성하는 구성 요소 클래스를받는 구성 요소가 있습니다. 이 & 렌더링 생성하는 TestBed에 대해 "entryComponents"를 제공합니다.

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

는 좀 TestComponent을 단위 테스트를 작성하고 전달하는 데 노력하고있어. "TestComponent에 대한 찾을 수 없습니다 부품 공장": "어떤" configureTestingModuleTestModuleMetadata을 기대하기 때문에 entryComponents을 가지고 있지만 내가하지 않는 오류가 캐스팅되어

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

.

entryComponentsTestBed에 어떻게 제공합니까?

답변

21

좋아요, 알아 냈습니다. 테스트에서 모의 ​​구성 요소를 선언하고이를 entryComponent으로 지정하는 곳에 새 모듈을 정의해야합니다.

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

그리고 나는 그것이 도움이되기를 바랍니다 TestBed

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

로 가져올 사람 :]

+0

그것은 나를 많이 도왔습니다. 고마워요! – trichetriche

+0

예! 그것은 작동! 정말 고맙습니다!! – llstarscreamll

+0

StackOverflow 만 해답을 여러 번 upvote 할 수 있습니다! –

9

당신은 또한 당신이 원하는 경우 직접 테스트 파일로 작업을 수행 할 수 있습니다

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

아마도 이것이 올바른 방법 일 것입니다. – MBielski

관련 문제