1. ホーム
  2. javascript

[解決済み] Angular2のテスト。ComponentFixtureのDebugElementとNativeElementオブジェクトの違いは何ですか?

2023-08-03 20:45:25

質問

現在、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!');
    });
}));

フィクスチャの debugElement.nativeElement をその nativeElement よりも使うような具体的なケースはありますか。

どのように解決するのですか?

  • nativeElement DOM要素への参照を返します。
  • DebugElement はAngular2のクラスで、要素やコンポーネントの調査に関連するあらゆる種類の参照やメソッドを含んでいます(See! のソースを参照してください。