2017-07-10 7 views
1

私は次のようなコードブロックのユニットテストカバレッジ、エラーを処理するメソッドを呼び出して、具体的catchブロックを取得しようとしています:私は持っているユニットテストカバレッジRxJS.Observable.Catchブロック

return this._http.get(/someurl) 
      .map((response: Response) => { 
       let results = <any>response.json(); 
       return results; 
      }) 
      .catch(response => { 
       return this.handleError(response); 
      }); 

キャッチブロックは呼び出されず、スパイが一度もヒットしなかったため、テストは失敗します。そこに運がないMockConnection.mockErrorを使ってみました。私はObservableでsubscribeエラーハンドラを使用する必要がある投稿を見ましたが、エラーレスポンス経由でcatchブロックをトリガする方法が必要ですか?私はObservable.throw()を介してObservableの失敗を投げてみましたが、それは正しいパスの下で私を得ることはできませんでした。

答えて

1

非同期操作を実行するには、オブザーバブルを購読する必要があります。

spyOn(myService, 'handleError'); 
myService.getData(1); // subscribe here 
tick(); 
expect(myService.handleError).toHaveBeenCalled(); 

は期待ところ、私はいくつかの観察可能なタイプの周りに他のいくつかの問題が返されていなかったこのよう

spyOn(myService, 'handleError'); 
myService.getData(1).subscribe(value => { 
    expect(myService.handleError).toHaveBeenCalled();  
}); 
+0

実装する必要があります。さらに、私はサブスクリプション(値=> {}、エラー=> {//ここに期待})を提供しなければならなかったことを追加します。私はexpect文で発生していた問題を解決しました。空のサブスクリプションブロックは私にとっては愚かなようですが、エラーブロックによって私は自分のアサーションを望みどおりに実行することができました。ボトムライン、エラーのないケース私はサブスクライブブロックを持っていた私はなぜ私はそれがネガティブテストにも必要とは思わなかったのか分からない。ありがとう! – Shawn

関連する問題