在我对伊斯坦布尔的测试中到底缺少什么来抱怨缺少分支覆盖?
What exactly is missing in my tests for istanbul to complain about missing branch coverage?
对于我的生活,我无法弄清楚伊斯坦布尔在这里抱怨什么。我在这个文件中发现了一个分支。这是相关组件的相关部分(我删除了不相关的位以避免噪音):
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%。这是代码覆盖率报告显示的内容:
我确定黄色的小亮点是伊斯坦布尔认为没有被覆盖的分支。但是,我不知道它实际上在抱怨什么,因此我不知道如何编写测试来覆盖它。我包含的示例测试是我对此功能的主要测试。显然它在某些方面有缺陷,但我不明白在什么方面,而且那个小亮点也不是很有用。
Angular 7.1.0,打字稿 3.1.6
看起来这是一个 open issue for istanbul。以这种方式使用另一个 class 似乎会导致一些问题。此线程中的一个潜在修复方法是为该方法指定一个 return 类型,如 any
。问题可能出在 TS 被翻译成的 javascript 中。 javascript 可能有一个您的代码没有的分支。
对于我的生活,我无法弄清楚伊斯坦布尔在这里抱怨什么。我在这个文件中发现了一个分支。这是相关组件的相关部分(我删除了不相关的位以避免噪音):
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%。这是代码覆盖率报告显示的内容:
我确定黄色的小亮点是伊斯坦布尔认为没有被覆盖的分支。但是,我不知道它实际上在抱怨什么,因此我不知道如何编写测试来覆盖它。我包含的示例测试是我对此功能的主要测试。显然它在某些方面有缺陷,但我不明白在什么方面,而且那个小亮点也不是很有用。
Angular 7.1.0,打字稿 3.1.6
看起来这是一个 open issue for istanbul。以这种方式使用另一个 class 似乎会导致一些问题。此线程中的一个潜在修复方法是为该方法指定一个 return 类型,如 any
。问题可能出在 TS 被翻译成的 javascript 中。 javascript 可能有一个您的代码没有的分支。