首页 > 解决方案 > 增加 jasmine 函数的覆盖率汇总

问题描述

我在应用程序组件中编写了一些函数。面临增加组件方法的覆盖率摘要的问题。

测试用例运行良好,只是覆盖摘要中没有跟踪几行。

app.component.ts

public initializeA(): void {
    this.flagClone.client = {
        build: null, //string
        name: null, //string
        id: null    //string
    }
}

public initializeB(): FlagResult {
    this.isSearch = false;
    return {
        id: null, //string
        description: null,  //string
        url: null,      //string
        client:{
            build: null, //string
            name: null, //string
            id: null    //string
        }
    };
}

app.component.spec.ts各自的测试用例

const testFlagResult: FlagResult = {
    id: null, //string
    description: null,  //string
    url: null,      //string
    client:{
        build: null, //string
        name: null, //string
        id: null    //string
    }
};
it('should initializeA',() => {
    const mock = spyOn(component,'initializeA').and.returnValue();
    component.initializeA();
    fixture.detectChanges();
    expect(mock).toHaveBeenCalled();
});

it('should initializeB',() => {
    const mock = spyOn(component,'initializeB').and.returnValue(testFlagResult);
    component.initializeB();
    fixture.detectChanges();
    expect(component.isSearch).toBeTruthy();
    expect(mock).toHaveBeenCalled();
});

期望以下块包含在覆盖范围摘要中:

public initializeA(): void {
    this.flagClone.client = {

public initializeB(): FlagResult {
    this.isSearch = false;

需要一些我错过的输入。

标签: angulartypescriptjasminekarma-jasmine

解决方案


添加间谍时,您不会检查被监视的代码。因此,通过让 const mock = spyOn(component,'initializeA').and.returnValue();您避免测试initializeA并且让 const mock = spyOn(component,'initializeB').and.returnValue(testFlagResult);您实际上没有测试initializeB

更好的实现是

it('should initializeA',() => {
    component.initializeA();
    fixture.detectChanges();
    expect(component.flagClone.client).toEqual({
        build: null,
        name: null, 
        id: null    
    });
});

it('should initializeB',() => {
    const expectedResult = {
        id: null, //string
        description: null,  //string
        url: null,      //string
        client:{
            build: null, //string
            name: null, //string
            id: null    //string
        }
    }

    const res = component.initializeB();
    fixture.detectChanges();
    expect(component.isSearch).toBeTruthy();
    expect(res).toEqual(expectedResult);
});

这样,您实际上是在测试您的方法是否按预期工作


推荐阅读