针对订户错误的 Angular 2 业力单元测试
Posted
技术标签:
【中文标题】针对订户错误的 Angular 2 业力单元测试【英文标题】:Angular 2 karma unit test for subscriber error 【发布时间】:2018-02-14 15:07:37 【问题描述】:在运行代码覆盖率测试时,我注意到我没有涵盖订阅者函数的错误处理。 测试功能:
getVersion()
return this.aboutService.getAPIVersion()
.subscribe(
info =>
console.log('info', info);
,
error =>
console.log('error', error);
);
这是组件中的函数,它从服务中调用函数。我设法使用 mockBackend abd MockError 为服务中的函数编写单元测试,但我不知道如何使用 wrapper(caller) 函数来做到这一点。
到目前为止,我用类模拟了服务,但我只涉及响应而不是错误:
class AboutServiceStub
getAPIVersion = jasmine.createSpy('getAPIVersion').and.callFake(
this.fakedGetAPIVersion
);
fakedGetAPIVersion()
console.log('fakedGetAPIVersion');
return Observable.of(new Object(version))
.map(version => JSON.parse(JSON.stringify(version)));
【问题讨论】:
【参考方案1】:我有同样的场景,我需要为一个测试用例测试错误用例(为了代码覆盖率)。我遵循的方法是 1.获取注入的服务进入测试如下
aboutService = fixture.debugElement.injector.get(AboutService);
2.现在覆盖方法使用
aboutService.getAPIVersion = () => Observable.throw('error');
所以对于这个特定的测试,该方法已被覆盖。 确切的代码可能不起作用,这是我记得的。
【讨论】:
你是对的,只有在 1) 步骤中你应该注入实际的服务,例如关于服务。当然我应该导入'rxjs/add/observable/throw'。谢谢! 感谢您的评论,我已经编辑了我的答案,以免对其他人产生错误。以上是关于针对订户错误的 Angular 2 业力单元测试的主要内容,如果未能解决你的问题,请参考以下文章
使用业力和 webpack 4 运行单元测试时无法读取未定义的属性“externalModuleIndicator”