2017-08-06 58 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 
    }); 
相关问题