针对订户错误的 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 业力单元测试的主要内容,如果未能解决你的问题,请参考以下文章

测试可观察对象 Angular 2 业力

错误和构建失败:使用业力执行测试时

使用业力和 webpack 4 运行单元测试时无法读取未定义的属性“externalModuleIndicator”

如何使用 gitlab CI 解决 Angular 业力测试的 chrome 错误?

执行业力测试时出错

在 Angular 1.5 中将模块注入业力测试