現在、コンポーネントレベルでAngular 2個のアプリをテストするためのベストプラクティスをまとめています。
セレクターなどのためにフィクスチャのNativeElementオブジェクトを照会するチュートリアルをいくつか見てきました。
it('should render "Hello World!" after click', async(() => {
builder.createAsync(HelloWorld).then((fixture: ComponentFixture<HelloWorld>) => {
fixture.detectChanges();
let el = fixture.nativeElement;
el.querySelector('h1').click();
fixture.detectChanges();
expect(el.querySelector('h1')).toHaveText('Hello World!');
});
}));
ただし、 juliemrのAngular 2テストシード では、親DebugElementオブジェクトを介してNativeElementにアクセスします。
it('should render "Hello World!" after click', async(() => {
builder.createAsync(HelloWorld).then((fixture: ComponentFixture<HelloWorld>) => {
fixture.detectChanges();
let compiled = fixture.debugElement.nativeElement;
compiled.querySelector('h1').click();
fixture.detectChanges();
expect(compiled.querySelector('h1')).toHaveText('Hello World!');
});
}));
NativeElementでフィクスチャのdebugElement.nativeElementを使用する特定のケースはありますか?
nativeElement
は、DOM要素への参照を返しますDebugElement
は、要素またはコンポーネントの調査に関連するすべての種類の参照とメソッドを含むAngular2クラスです( DebugNodeおよびDebugElementのソース既に言及されているものに追加するには:
abstract class ComponentFixture {
debugElement; // test helper
componentInstance; // access properties and methods
nativeElement; // access DOM
detectChanges(); // trigger component change detection
}
このトピックに関する角度付きの議論 および関連する PR をご覧ください。
主に:
fixture.componentInstance == fixture.debugElement.componentInstance;
fixture.nativeElement == fixture.debugElement.nativeElement;
.nativeElement()
はDOMツリーを返し、debugElement
はJSオブジェクト(debugElementツリー)を返します。 debugElement
は、Angularのメソッドです。
.nativeElement()
は、DOMツリーを返す、またはDOMツリーへのアクセスを許可するブラウザー固有のAPIです。しかし、アプリケーションがブラウザ以外のプラットフォーム(サーバーやWebワーカーなど)で実行されている場合、その場合.nativeElement()
はエラーをスローする可能性があります。
アプリケーションがブラウザのみで実行されることが確実な場合は、
let el = fixture.nativeElement
を使用できます。しかし、プラットフォームがわからない場合は、安全な側にするためにlet le = fixture.debugElement
を使用します。これはプレーンなJSオブジェクトを返すためです。