現在、httpリクエストサービスを呼び出してサブスクリプションパート内で何かを実行する関数をテストしようとしています(関数を呼び出して変数を設定します)。これまでのところ私のアプローチは単に関数を呼び出すことで、リクエストサービスが自動的に呼び出されると思ったので、購読部分が実行されます。しかし、私はこれが動作していないので、これを行う方法ではないように感じます。Angular2 - 内部でhttpサービスを呼び出す関数をテストします。
私がテストしたい機能:
public trainBot() {
this.isTraining = true;
this.requestsService.trainModel(this.botId, false)
.subscribe(response => {
this.trainingStatus = this.trainingStatusMapping[response['status']];
this.pollTrainingStatus();
});
}
私のテスト今のところ(動作しません)。
it('should poll the training status',() => {
spyOn(component, 'pollTrainingStatus').and.callThrough();
component.trainBot();
fixture.detectChanges();
expect(component.pollTrainingStatus).toHaveBeenCalled();
});
だから、誰もが(.subscribe内のその部分をテストする方法を教えてくださいすることができます...一部
更新:?
誰かが私がのreturnValueを追加提案されているようと非同期に私のテスト彼らはまだ動作していないが、今そのように見える:。
it('should poll the training status', fakeAsync(() => {
component.trainBot();
spyOn(service, 'trainModel').and.returnValue(Observable.of({'status': 'training'}));
spyOn(component, 'pollTrainingStatus').and.callThrough();
fixture.detectChanges();
tick(1);
expect(service.trainModel).toHaveBeenCalled();
expect(component.pollTrainingStatus).toHaveBeenCalled();
}));
エラーは同じ
です
受信したエラー、または失敗したテストの出力を共有できますか? – Kevin
@Kevin "spy pollTrainingStatusが呼び出されると予想されました。"これはpollTrainingStatus()が呼び出されていないことを意味します – threxx
この質問をチェックしてください:[subscribeメソッドのためのジャスミンを使ったangular2テスト](https://stackoverflow.com/questions/40080912/angular2-testing-using-jasmine-for-subscribe-method) 。その答えがあなたのために働くかどうか私に教えてください。 – Kevin