2016-04-06 12 views
4

@ViewChildアノテーションを持つコンポーネントをテストしようとしています。私がテストしようとしている関数の1つは、フォーカスのために@ViewChildの要素を呼び出します。しかし、@ViewChild変数をログアウトしようとすると、常にundefinedになります。私はcomponentFixture.detectChanges()ElementRefを開始すると思ったが、それはそうではないようだ。console.logで、ユニットテストでViewChild変数が定義されていません

それを作る方法はありますか?undefined

+1

デーモンあなたが達成しようとしていることを述べていますか? –

答えて

2

使用するAngular2のバージョンとテストスイートの初期化方法はわかりませんが、ComponentFixtureインスタンスのdetectChangesメソッドは、このようなフィールドを設定する責任があります。ここで

はこれを示すサンプルテストです: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'); 
    }); 
})); 

は、対応するplunkrを参照してください。

2

あなたがやったので、おそらくuは未定義ことを持って、あなたのコードを示さなかったが、あなたのViewChildのような: @ViewChild(MySubComponent) 代わりに、あなたのテンプレートで

@ViewChild('componentref') 

の、その後:

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

もちろんあなたのコンポーネントを初期化する必要がありますcomponentFixture.detectChanges()

+0

とテストのモックコンポーネントをどのように参照するのですか? – Choco

+1

TestBed.get(ChildComponentName)を試してみてください。TestBed APIを見ると、他のネイティブな方法はありません。それは確かにサービスのために働く:)他の方法はあなたのテストコンポーネントのパブリックプロパティに@ViewChildを公開することです。しかし、一般的には、通常のクラスのようなコンポーネントを扱うファンです。その場合は、テストコンポーネントの作成を満たすためにモックコンポーネントを作成してから、それらを忘れてしまいます。 – PaTT

+0

ユニットテスト仕様を取得する方法 –

関連する問題