如何在Angular2测试中模拟Observable.throw?
问题描述:
我想测试我的Angular2组件中的错误处理,因此想模拟一个服务来返回一个Observable.throw('错误')。如何使用Jasmine和Karma和Angular 2来完成?如何在Angular2测试中模拟Observable.throw?
答
您应该可以看到create
,并且只需拨打观察员error
即可。例如,
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
与数据一起被调用。
当您订阅可观察到的,你可以在调用observer.next
,observer.error
,observer.complete
当过三回呼,success
,error
,并complete
service.getData().subscribe(
(data) => {} // sucess
(error) => {} // error
() => {} // complete
)
与
observer
所以,相应的回调将被调用。
+0
我对这个有点麻烦。它是否在测试声明中,即“我”将属性设置为“true”?当我将属性设置为“true”时,在我设置的测试声明中没有找到更改。如果这有帮助,我可以将我的代码放在一个plnkr中。 – bmd
答
你可以简单地模拟像Observable.throw({status:404})这样的Observable throw错误对象,并测试observable的错误块。
const xService = fixture.debugElement.injector.get(SomeService);
const mockCall = spyOn(xService, 'method')
.and.returnValue(Observable.throw({status: 404}));
您能否给我们提供一个代码示例?为您的问题添加上下文,让我们提供准确的答案。 – Supamiu