web-dev-qa-db-ja.com

Angular2、テストおよび解決されたデータ:ngOnINitをテストする方法?

Angular2テストガイド に取り組んでおり、ngOnInit()関数のテストを作成したいと考えています。プログラミングガイドのルーティング部分の形式は次のとおりです。

let org: Org = null;

ngOnInit(): void {
  let that = this;

  this.route.data
    .subscribe((data: { org: Org }) => {
      that.org = data.org;
    });
}

これは、次のようなリゾルバによって実現されます。

resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<Org> {
  let id = this.authService.user.orgId;

  return this.orgService
    .getOrg(id)
    .map(
      (org: Org) : Org => {

        if(org) {
          return org;
        } else { 
          // If  the Org isn't available then the edit page isn't appropriate.
          this.router.navigate(['/provider/home']);
          return null;
        }
     })
    .first();
}

コードは問題なく動作しますが、ngOnInitのテストの書き方がわかりません。私が利用できる例では、埋め込みOrgServiceをMockOrgServiceに置き換えることができると仮定しています。しかし、私が持っているのはリゾルバだけです。

最終的には、リゾルバーを単独でテストする方法を見つけます。リゾルバベースのngOnInitで実行できる便利なテストはありますか?

おかげで、

ジェローム。

14
Jerome P Mrozak

動作またはngOnInitメソッドとは何ですか?ルートデータが解決されるときに、orgの値を割り当てるだけです。したがって、テストする必要があるのはこれだけです。

let routeStub;

beforeEach(() => {
  routeStub = {
    data: null
  }

  TestBed.configureTestingModule({
    providers: [
      { provide: ActivatedRoute, useValue: routeStub }  
    ]
  })
})

it('should assign org when route is resolved', async(() => {
  let org = new Org()
  route.data = Observable.of(org)

  fixture.detectChanges();
  fixture.whenStable().then(() => {
    expect(component.org).toEqual(org)
  })
}))
29
Paul Samsotha

コンポーネントのngOnInit()をテストしようとしていましたが、残念ながら受け入れられた答えはうまくいきませんでした。ただし、これは次のとおりです。

describe('your test', () => {
  beforeEach(async() => {
    // set up your component as necessary

    component.ngOnInit();

    await fixture.whenStable();
  });

  it('should verify your test', () => {
    // run your expectation
  });
});
14
Ian Yoder