如何在Angular2测试中模拟Observable.throw? [英] How can I mock an Observable.throw in an Angular2 test?
问题描述
我想测试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屋!