【问题标题】:Angular 2 karma unit test for subscriber error针对订户错误的 Angular 2 业力单元测试
【发布时间】: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)));
    }
}

【问题讨论】:

    标签: angular unit-testing jasmine karma-runner observable


    【解决方案1】:

    我有同样的场景,我需要为一个测试用例测试错误用例(为了代码覆盖率)。我遵循的方法是 1.获取注入的服务进入测试如下

    aboutService = fixture.debugElement.injector.get(AboutService);
    

    2.现在覆盖方法使用

    aboutService.getAPIVersion = () => Observable.throw('error');
    

    所以对于这个特定的测试,该方法已被覆盖。 确切的代码可能不起作用,这是我记得的。

    【讨论】:

    • 你是对的,只有在 1) 步骤中你应该注入实际的服务,例如关于服务。当然我应该导入'rxjs/add/observable/throw'。谢谢!
    • 感谢您的评论,我已经编辑了我的答案,以免对其他人产生错误。
    猜你喜欢
    • 2018-06-07
    • 1970-01-01
    • 2014-01-21
    • 1970-01-01
    • 1970-01-01
    • 2016-10-05
    • 2023-03-29
    • 1970-01-01
    • 2016-06-19
    相关资源
    最近更新 更多