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