增加 jasmine 中函数的覆盖率摘要

Increase the coverage summary for function in 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;

需要一些我遗漏的信息。

添加间谍时,您并不是在检查被监视的代码。所以通过有 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);
});

通过这种方式,您实际上是在测试您的方法是否按预期工作