Ste*_*fan 15 jasmine karma-runner angular
我想测试我的Angular2组件中的错误处理,因此想要模拟一个服务来返回一个Observable.throw('error').如何使用Jasmine和Karma以及Angular 2完成?
Pau*_*tha 15
你应该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();
})
}
}
Run Code Online (Sandbox Code Playgroud)
现在,对于测试,您可以将模拟用于成功案例和错误案例.对于错误情况,只需将该error属性设置为true即可.在成功的情况下,next用数据调用.
当您订阅可观察到的,可以通过三门回调success,error和complete
service.getData().subscribe(
(data) => {} // sucess
(error) => {} // error
() => {} // complete
)
Run Code Online (Sandbox Code Playgroud)
于是用observer,打电话时observer.next,observer.error,observer.complete,相应的回调将被调用.
小智 12
这是我使用Rxjs 6的解决方案
let mockService = {
getData: () => {
return of({data:'any data'});
}
}
spyOn(mockService , 'getData').and.callFake(() => {
return throwError(new Error('Fake error'));
});
Run Code Online (Sandbox Code Playgroud)
你可以简单地模拟Observable并抛出错误对象,Observable.throw({status: 404})并测试observable的错误块.
const xService = fixture.debugElement.injector.get(SomeService);
const mockCall = spyOn(xService, 'xMethod')
.and.returnValue(Observable.throw({status: 404}));
Run Code Online (Sandbox Code Playgroud)
在这里,我抛出http 404的错误Observable.throw({status: 404})被嘲笑xMethod的xSerive在我的测试.
| 归档时间: |
|
| 查看次数: |
12062 次 |
| 最近记录: |