2017-08-06 60 views
1

我有一個通常返回可觀察的組件調用服務。測試可觀察捕獲方法

let res = this.serviceApi.getInfo(); 

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

res.catch(()=>{ 

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

我想如何測試res.catch?
我累了嘲笑中的service並返回Observable.throw(「錯誤」),但測試拋出錯誤

+2

要知道,'catch'是運營商,並且這樣,它返回一個必須訂閱的「catch」組成的鏈表。你正在調用catch,並且忽略了返回的observable,所以對catch的調用將是無效的。 – cartant

回答

1

有兩個問題與您的代碼

1 - 作爲cartant指出,您呼叫.catch (),而不是將其添加到可觀察序列中。您可以通過重新分配資源

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

但是我覺得這是更好的做法,當你初始化定義觀察的順序添加。這使得在一個地方

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 
    }); 
相關問題