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

查看:19
本文介绍了如何在 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?

推荐答案

你应该create一个observable,然后调用observable error.例如

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();
    })
  }
}

现在,对于您的测试,您可以将模拟用于成功案例和错误案例.对于错误情况,只需将 error 属性设置为 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时,可以传递三个回调,successerrorcomplete

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

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

所以用observer,当调用observer.nextobserver.errorobserver.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天全站免登陆