2017-03-07 71 views
3

我正在通過Angular2 testing guide並希望爲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?

感謝,

傑羅姆。

+0

我想測試ngOnInit應該是角度球隊的責任,你應該只需要測試你是從它調用 –

回答

11

什麼是行爲或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) 
    }) 
})) 
+2

熱的東西的方法!那是你第三次救了我,因爲你也在不知道的情況下回答了另一個Q.那就是:我如何擺脫「沒有激活路線的提供者!」錯誤。謝謝,傑羅姆。 –

+0

很高興幫助... –