2016-11-21 2 views
0

私は多数のサブコンポーネントを持つテスト対象のコンポーネントを持っています。私のテストでは、これらのサブコンポーネントのいくつかのオブジェクトへの参照を取得して、プロパティが正しく動作しているかどうかを確認し、対話的に変更するようにしたいと考えています。 (例:セグメントボタンコンポーネントがどの状態になっているかを確認するか手動で別の状態にする)テスト:サブコンポーネントのコンポーネントインスタンスを検索する方法

私は角度に関するテストドキュメントを見てきましたが、これを行う方法はありません。私はおそらく、私は、サブコンポーネントのデバッグ要素を見つけてそれをcomponentInstanceにアクセスするために、フィクスチャのdebugElementのクエリを実行することができますが、それは常にnullのようです。ドキュメントを見て例えば

https://angular.io/docs/ts/latest/guide/testing.html#!#component-inside-test-host

beforeEach(async(() => { 
    TestBed.configureTestingModule({ 
    declarations: [ DashboardHeroComponent, TestHostComponent ], //  declare both 
}).compileComponents(); 
})); 

beforeEach(() => { 
    // create TestHostComponent instead of DashboardHeroComponent 
    fixture = TestBed.createComponent(TestHostComponent); 
    testHost = fixture.componentInstance; 
    heroEl = fixture.debugElement.query(By.css('.hero')); // find hero 
    fixture.detectChanges(); // trigger initial data binding 
}); 

私はTestHostComponentDashboardHeroComponentへの参照を取得する方法をしたいと思います。誰もこれを行う方法を知っていますか?

+0

'@ HostBinding'を使用して' .hero'クラスをコンポーネントに追加しますか?あるいは '@ Component'' selector'で使用しますか? – RomanHotsiy

+0

ドキュメントの完全な例は、次のとおりです。https://angular.io/resources/live-examples/testing/ts/app-specs.plnkr.htmlコンポーネントセレクタを使用しているようです。 – Allen

答えて

1

クラス.heroは、コンポーネントビューではなく、コンポーネントビューの内部divに設定されています。

heroEl = fixture.debugElement.query(By.css('dashboard-hero')); // find hero 

またはBy.directive

を使用します - それは取得 componentInstanceは(あなたが @Component注釈のプロパティ selectorでこれを見つけることができます。この場合、タグ名)適切なセレクタを使用するには付属の componentInstance

を持っていない理由です

heroEl = fixture.debugElement.query(By.directive(DashboardHeroComponent)); 
関連する問題