2017-08-06 11 views
1

私は通常、observableを返すコンポーネント呼び出しサービスを持っています。観測可能なcatchメソッドをテストする

let res = this.serviceApi.getInfo(); 

res.subscribe(()=>do smothing;) 

res.catch(()=>{ 

do smoething; 
return Observable.throw('error) 
}); 

私はres.catchをテストする方法が欲しいですか?
私は疲れserivceを嘲笑し、Observable.throw(「エラー」)が、テスト・スロー・エラーあなたのコードと2つの問題があり

+2

のようなものが 'catch'のような、演算子であり、あることに注意してください必要があります'catch'をチェーンに組み込むために購読しなければならないobservableを返します。あなたは 'catch'を呼び出していて、返されたobservableを無視しているので、' catch'の呼び出しは効果がありません。 – cartant

答えて

1

を戻す

1 - cartantが指摘したように、あなたは.catch呼んでいます()を観察可能なシーケンスに追加するのではなく、観測可能なシーケンスに追加します。

res = res.catch(err => { 
    return Observable.throw('error'); 
}); 

ただし、初期化時に観察可能なシーケンスを定義する方がよいと思います。これは、1つの場所

let res = this.serviceApi.getInfo() 
    .catch(err => { 
     return Observable.throw('error'); 
    }); 

2で観察定義を保持します - キャッチ法が割り当てられる前に、したがって、キャッチメソッドが実行されないだろう、観察可能なシーケンスに加入されています。あなたは、観察シーケンスにキャッチメソッドを追加し、サブスクライブメソッドを呼び出した場合、キャッチメソッドが割り当てられた後

だから、

let res = this.serviceApi.getInfo() 
    .catch(err => { 
     return Observable.throw('error'); 
    }); 

res.subscribe(
    res => { 
     // success callback 
    }, 
    err => { 
     // error callback, err is the error returned from your catch method 
    }); 
関連する問題