我的测试中缺少伊斯坦布尔抱怨缺少分支覆盖的确切缺点?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我的测试中缺少伊斯坦布尔抱怨缺少分支覆盖的确切缺点?相关的知识,希望对你有一定的参考价值。

对于我的生活,我无法弄清楚伊斯坦布尔在这里抱怨什么。我有一个在这个文件中被发现的分支。这是相关组件的相关部分(我删除了不相关的位以避免噪声):

export class TextComponent {
    value: string;
    _field: FieldModel;
    private _record: any;

    @Input()
    set field(field: FieldModel) {
        this._field = field;
        this.cacheValue();
    }

    @Input()
    set record(record: any) {
        this._record = record;
        this.cacheValue();
    }

    cacheValue() {
        this.value = this.getValue();
    }

    getValue(): string {
        if (!this._record || !this._field) {
            return '';
        }

        return this._field.name in this._record ? this._record[this._field.name] : '';
    }
}

并进行了样本测试:

    it('should store the record value', () => {
        component.record = {
            first: "Nancy",
            last: "Sue",
        };
        expect(component.value).toBe('');

        component.field = {name: 'first'};
        expect(component.value).toBe('Nancy');
    });

我的代码覆盖率是100%,除了一个缺少的分支。这是代码覆盖率报告显示的内容:

enter image description here

我肯定知道黄色的小亮点是伊斯坦布尔认为没有覆盖的分支。但是,我不知道它实际上在抱怨什么,因此我不知道如何编写测试来覆盖它。我包含的样本测试是我对此功能的主要测试。显然它在某种程度上是有缺陷的,但我不知道以什么方式,并且这个小亮点不是很有用。

Angular 7.1.0,打字稿3.1.6

答案

看起来这是一个open issue for istanbul。看起来以这种方式使用另一个类可能会导致一些问题。此线程中的一个潜在修复是为方法指定类似any的返回类型。很可能问题出在TS被翻译成的javascript中。 javascript可能有一个代码没有的分支。

以上是关于我的测试中缺少伊斯坦布尔抱怨缺少分支覆盖的确切缺点?的主要内容,如果未能解决你的问题,请参考以下文章

更新语句使 Datagrip 抱怨缺少 WHERE 子句

Opsworks 食谱抱怨缺少方法

Perl 不会抱怨缺少分号

多行var声明上的Jest单元测试分支覆盖率

Kotlin协程的Jacoco代码覆盖率不正确

当我拥有它们时,Py2exe 抱怨缺少 dll?