2017-01-05 7 views
10

के लिए "entryComponents" मैं एक घटक है जो गतिशील रूप से एक बच्चे के रूप में बनाने के लिए घटक के एक घटक के वर्ग प्राप्त करता है।प्रदान करना एक टेस्टबेड

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

मैं इसे बनाने के लिए & प्रस्तुत करना एक इकाई परीक्षण लिखने और कुछ TestComponent पारित करने के लिए कोशिश कर रहा हूँ।

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

वहाँ "किसी भी" क्योंकि configureTestingModuleTestModuleMetadata उम्मीद जो entryComponents नहीं है, लेकिन मैं मिलता है त्रुटि के कास्टिंग है: "कोई घटक TestComponent के लिए पाया कारखाने"।

मैं कैसे entryComponents एक TestBed को प्रदान कर सकते हैं?

उत्तर

21

ठीक है, मैं यह पता लगा। जहां आप अपने नकली घटक घोषित करने और एक entryComponent भी रूप में यह निर्दिष्ट परीक्षण में आप नए मॉड्यूल परिभाषित करना चाहिए।

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

और यह आयात TestBed

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

में मुझे आशा है कि यह मदद मिलेगी किसी:]

+0

यह मुझे बहुत मदद की, धन्यवाद! – trichetriche

+0

हाँ !! यह काम करता हैं!! बहुत बहुत धन्यवाद!! – llstarscreamll

+0

यदि केवल स्टैक ओवरफ्लो आपको एक से अधिक बार एक उत्तर देने देता है! –

9

आप भी अपने परीक्षण फ़ाइल में यह कर सकते हैं सीधे अगर आप चाहते हैं:

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

यह संभवतः यह करने का अधिक सही तरीका है। – MBielski

संबंधित मुद्दे