【问题标题】:Test observable catch method测试可观察的 catch 方法
【发布时间】:2018-01-13 16:13:33
【问题描述】:

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

let res = this.serviceApi.getInfo();

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

res.catch(()=>{

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

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

【问题讨论】:

  • 请注意 catch 是一个运算符,因此,它返回一个必须订阅的 observable,catch 才能被组合到链中。您正在调用 catch 并忽略返回的 observable - 因此对 catch 的调用将无效。

标签: angular unit-testing observable


【解决方案1】:

您的代码有 2 个问题

1 - 正如 carant 指出的那样,您在可观察序列上调用 .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
    });

【讨论】:

    猜你喜欢
    • 2018-01-10
    • 2016-06-10
    • 2021-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多