Angular 8 karma 测试服务中 Observable 的成功和错误
Angular 8 karma test both success and error of Observable from service
我正在测试 MyComponent,它在 ngOnInit 中调用一个 returns 可观察的服务方法:
this.myService.getMyData().subscribe(
(data) => {
//do something
},
(error) => {
//do something - error
}
);
我在 getMyData
上安装了一个间谍,这样:
mySpy = spyOn(myService, 'getMyData').and.returnValue(of(mockObject));
这涵盖了订阅的“成功分支”。但我还需要涵盖“错误分支”。我试过这样做:
spyOn(myService, 'getMyData').and.returnValue(throwError(new Error('Error')));
当然 Jasmine 告诉我 getMyData
已经被监视了。如何涵盖两个分支?
您所做的是正确的,但是您不能在同一个测试用例中多次监视同一个服务。
因此您需要编写第二个测试用例来涵盖您的错误场景。
像这样:
it('should run success scenario', () => {
mySpy = spyOn(myService, 'getMyData').and.returnValue(of(mockObject));
})
it('should run error scenario', () => {
mySpy = spyOn(myService, 'getMyData').and.returnValue(throwError(new Error('Error')));
})
我正在测试 MyComponent,它在 ngOnInit 中调用一个 returns 可观察的服务方法:
this.myService.getMyData().subscribe(
(data) => {
//do something
},
(error) => {
//do something - error
}
);
我在 getMyData
上安装了一个间谍,这样:
mySpy = spyOn(myService, 'getMyData').and.returnValue(of(mockObject));
这涵盖了订阅的“成功分支”。但我还需要涵盖“错误分支”。我试过这样做:
spyOn(myService, 'getMyData').and.returnValue(throwError(new Error('Error')));
当然 Jasmine 告诉我 getMyData
已经被监视了。如何涵盖两个分支?
您所做的是正确的,但是您不能在同一个测试用例中多次监视同一个服务。
因此您需要编写第二个测试用例来涵盖您的错误场景。
像这样:
it('should run success scenario', () => {
mySpy = spyOn(myService, 'getMyData').and.returnValue(of(mockObject));
})
it('should run error scenario', () => {
mySpy = spyOn(myService, 'getMyData').and.returnValue(throwError(new Error('Error')));
})