测试可观察的捕获方法

时间:2017-08-06 04:35:04

标签: angular unit-testing observable

我有一个组件调用服务,通常会返回observable。

let res = this.serviceApi.getInfo();

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

res.catch(()=>{

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

我想如何测试res.catch?
我厌倦了模拟服务并返回Observable.throw('错误')但是测试抛出错误

1 个答案:

答案 0 :(得分:1)

您的代码存在2个问题

1 - 正如cartant指出的那样,您在可观察序列上调用.catch()而不是将其添加到您的可观察序列中。你可以通过重新分配res来添加它

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

但是我认为在初始化时可以更好地定义可观察序列。这使可观察的定义保持在一个地方

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

2 - 您在分配catch方法之前订阅了可观察序列,因此catch方法永远不会运行。

因此,如果将catch方法添加到可观察序列并在分配catch方法后调用subscribe方法,则会有类似

的内容。
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
    });