我的單元測試與Jasmine有幾個問題。第一招:Angular 2單元測試
我需要在一個叫CaseList組件來測試這一點:
gotoDetail(case: Case){
this._router.navigate(['CaseDetail', {"id": case.id}]);
}
我所有的努力在測試給誤差this._router是不確定的,那麼這是因爲我還沒有將它定義在我的測試中,因爲我無法弄清楚如何!我甚至沒有在測試中提出任何好的嘗試,因爲我不知道如何進行。所以這就是爲什麼我沒有在這裏發佈任何嘗試...
編輯:路由器測試中與上述問題有關的部分,但我測試了單獨文件中的所有路由!這個測試有效!
it('Should navigate to Case Detail List', (done) => {
router.navigate(['CaseDetail', {id: 'test'}]).then(() => {
expect(location.path()).toEqual('/casedetail/test');
done();
}).catch(e => done.fail(e));
});
從細節成分(其中,用戶選擇的情況下後導航)第二測試:
addStep(){
this.case.getSteps().push(new Step());
}
我也有一個remove方法我需要測試:
removeStep(step: Step){
this.case.removeStep(step);
}
構造此組件:
constructor(public _routeParams: RouteParams, public _service: Service) {
this.case = _service.getById(_routeParams.get('id'));
}
所以測試我想這樣做的附加方法:
it('passes new step to case-class',() => {
spyOn(case, 'addStep')
.and.returnValue(Observable.of({complete: true}))
caseDetail.addStep();
expect(case.addStep).toHaveBeenCalledWith(step);
});
所以這些方法調用是所謂的「案例」一個單獨的類的方法。
我在測試這些時遇到的錯誤是這種情況是空的。我猜路由和服務會混淆它,因爲在同一個組件中我有其他「相同」的方法,並且測試那些工作正常。但他們屬於不同的階級。
方法相同的組件,指的是「步」級:
addFeedback(step: Step){
step.addFeedback(new Feedback());
}
測試完美的作品:在測試中我應該擁有的一切組件
it('passes feedback value to Step class',() => {
spyOn(step, 'addFeedback')
.and.returnValue(Observable.of({complete: true}))
caseDetail.addFeedback(step);
expect(step.addFeedback).toHaveBeenCalledWith(feedback);
})
所以,很顯然定義是因爲反饋方法的測試起作用。我只需要以某種方式定義「case」對象,以便它不會抱怨它爲空。
希望你能得到我的問題,希望你能幫上忙! :)
我確實有路由器單獨的測試,實際上與你的榜樣。這工作正常。我不確定你的意思是「在測試之前添加路由器和案例作爲提供者」。我對編碼真的很陌生,這是我第一次嘗試單元測試;)在我的原始問題中添加了與我的第一個「問題」 - 「gotodetail」相關的路由測試。如所說的路線測試工作正常!但是我需要測試組件中的「gotodetail」,並且我不確定如何在那裏定義路由器?我真的需要在那裏添加所有的代碼,以便能夠測試「gotodetail」嗎? – Alex
還是我需要測試「goToDetail」,因爲路線經過測試?我猜想我有點困惑。第二個問題仍然存在,情況是空的,所以如果有人有任何見解,這將不勝感激:) – Alex
如果你在單元測試中通過路線導航,那麼你會需要所有的代碼。對於情況爲空,我不太確定是什麼情況,但是您可以在單元測試之前嘗試添加案例作爲提供者 – xphong