2016-04-06 27 views
4

birim testinde tanımsızdır @ViewChild ek açıklamasına sahip bir bileşeni test etmeye çalışıyorum. Test etmeye çalıştığım işlevlerden biri, odaklanmak için @ViewChild öğesinin öğesini çağırır. Ancak, @ViewChild değişkenini günlüğe kaydetmeye çalıştığımda, her zaman undefined olur. componentFixture.detectChanges()'un ElementRef'u başlattığını sanıyordum, ancak görünmüyor.console.log, ViewChild değişkeni

undefined olmaması için herhangi bir yolu var mı?

+1

ile başlatmanız gerekir. Neyi başarmaya çalıştığını gösteriyor? –

cevap

2

Angular2'nin hangi sürümünü kullandığınızı ve test paketinizi nasıl başlattığınızı bilmiyorum, ancak ComponentFixture örneğinde detectChanges yönteminin bu tür alanları ayarlamasından sorumlu olduğunu bilmiyorum. https://plnkr.co/edit/THMBXX?p=preview:

it('should set testElt', injectAsync([TestComponentBuilder], (tcb: TestComponentBuilder) => { 
    return tcb.createAsync(MyList).then((componentFixture: ComponentFixture) => { 
     expect(componentFixture.componentInstance.testElt).toBeUndefined(); 

     componentFixture.detectChanges(); 

     expect(componentFixture.componentInstance.testElt).toBeDefined(); 
     var testElt = componentFixture.componentInstance.testElt; 
     expect(testElt.nativeElement.textContent).toEqual('Some test'); 
    }); 
})); 

gelen plunkr bakınız: Burada

bu gösteren bir örnek testidir.

2

Yaptığın çünkü muhtemelen u tanımsız buna sahip, kodunuzu göstermek etmedi ama sizin ViewChild gibi: @ViewChild(MySubComponent) yerine şablonunda

@ViewChild('componentref') 

ve sonra:

<my-sub-component #componentref></my-sub-component> 

ve tabii ki, bileşeninizi componentFixture.detectChanges()

+0

ve testteki sahte bileşeni kendi kendine nasıl referanslarsınız? – Choco

+1

TestBed.pi (ChildComponentName) kullanmayı deneyin, TestBed api'ye bakın, başka bir yerel yol göremiyorum. Kesinlikle hizmet için çalışıyor :) Tavsiye edilmeyen diğer bir yolu, test bileşeninizin genel özelliklerine @ViewChild göstermektir. Ama genel olarak, normal bir sınıf gibi bir bileşenin tedavi edilmesi hayranıyım. Bu durumda, yalnızca bileşenlerinizi oluşturmak için deneme bileşenlerinizi oluşturursunuz ve sonra bunları unutun. – PaTT

+0

birim test özelliklerinde nasıl edinilir –

İlgili konular