Angular 8 karma 从服务中测试 Observable 的成功和错误
Posted
技术标签:
【中文标题】Angular 8 karma 从服务中测试 Observable 的成功和错误【英文标题】:Angular 8 karma test both success and error of Observable from service 【发布时间】:2021-06-26 14:55:24 【问题描述】:我正在测试 MyComponent,它在 ngOnInit 中调用一个返回 observable 的服务方法:
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
已经被监视了。如何覆盖两个分支?
【问题讨论】:
【参考方案1】:您所做的是正确的,但是您不能在同一个测试用例中多次监视同一个服务。
因此您需要编写第二个测试用例来涵盖您的错误场景。
类似这样的:
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')));
)
【讨论】:
嗨,谢谢,既然我在 beforeEach 中声明了我的间谍,我应该删除那里的声明并将其移动到每个测试用例中,对吧? 你也可以这样做。以上是关于Angular 8 karma 从服务中测试 Observable 的成功和错误的主要内容,如果未能解决你的问题,请参考以下文章
模拟指令以测试组件 - Angular 8 与 jasmine 和 Karma
使用 jasmine / karma 进行 Angular 4 单元测试和 http post mocking - 如何修复