7

としてMainComponent使用しています。のメソッドを呼び出しています。ChildComponentA@ViewChildMainComponentChildComponentA

ユニットテストケースのモックを書きたいですChildComponentATestBed(Angular 2 RC5で)を使用してこれを行うにはどうすればよいですか?

使用する前にoverrideDirective(MainComponentName, ChildComponentA, MockChildComponentA);これを使用するのと同等のものはありTestBedますか?

使ってみた

TestBed.overrideComponent(ChildComponentA,{
        set: {
          template: '<div></div>'
        }
      }); 

テンプレートを設定するだけですが、コンポーネントのメソッドもモックしたいと思います。

4

2 に答える 2

6

この場合、子コンポーネントをモック コンポーネントに置き換えてみてください。同じセレクターでモック コンポーネントを作成し、TestBed を使用して実際の子コンポーネントの宣言を削除し、その宣言をモック コンポーネントに追加するだけです。

@Component({
  selector: 'child',
  template: '<div></div>'
})
class MockComponent {

}

そして、テストでこれを実行して、モック コンポーネントを使用します。

    TestBed.configureTestingModule({
        imports: [MyModule],
        declarations: [ParentComponent, MockComponent]
    });

    TestBed.overrideModule(MyModule, {
        remove: {
            declarations: [ParentComponent, ChildComponent],
            exports: [ParentComponent, ChildComponent]
        }
    });

詳細はこちら: https://github.com/angular/angular/issues/10689 . 必ず ParentComponent を再宣言してください。それ以外の場合は機能しません (理由は不明です)。

@ViewChild を使用して子コンポーネントへの参照を取得する場合は、コンポーネントのタイプではなく ID を使用するように変更する必要があります。@ViewChild(ChildComponent) の代わりに @ViewChild('child') を使用してください。ここから 2 番目の例を参照してください: http://learnangular2.com/viewChild/

于 2016-09-07T11:08:32.790 に答える