如何在Angular2测试中模拟Observable.throw? [英] How can I mock an Observable.throw in an Angular2 test?

查看:116
本文介绍了如何在Angular2测试中模拟Observable.throw?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想测试Angular2组件中的错误处理,因此想要模拟一个服务来返回一个Observable.throw('error')。如何使用Jasmine和Karma以及Angular 2完成?

I want to test the error handling in my Angular2 component and therefore want to mock a service to return an Observable.throw('error'). How can that be done using Jasmine and Karma and Angular 2?

推荐答案

你应该创建一个observable,只需调用观察者错误。例如

You should create an observable, and just call the observer error. For example

let mockService = {
  error: false,
  data: 'something',
  getData: () => {
    return Observable.create(observer => {
      if (this.error) {
        observer.error(new Error(..))
      } else {
        observer.next(this.data);
      }
      observer.complete();
    })
  }
}

现在进行测试,您可以将模拟用于成功案例和错误案例。对于错误情况,只需将错误属性设置为true即可。在成功的情况下,使用数据调用 next

Now for your tests, you can use the mock for both success cases and error cases. For an error case, just set the error property to true. In the success case, next is called with the data.

当您订阅一个observable时,您可以通过三个回调,成功错误完成

When you subscribe to an observable, you can pass three callback, success, error, and complete

service.getData().subscribe(
  (data) => {}   // sucess
  (error) => {}  // error
  () => {}       // complete
)

所以使用观察者,当调用 observer.next 时, observer.error observer.complete ,将调用相应的回调。

So with the observer, when calling observer.next, observer.error, observer.complete, the corresponding callback will be called.

这篇关于如何在Angular2测试中模拟Observable.throw?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆