#angular #typescript #istanbul
#angular #typescript #istanbul
Вопрос:
Хоть убейте, я не могу понять, на что жалуется Стамбул здесь. У меня есть одна ветвь, которая не обнаружена в этом файле. Вот соответствующая часть рассматриваемого компонента (я удалил несвязанные биты, чтобы избежать шума):
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, typescript 3.1.6
Комментарии:
1. Какую версию Angular вы используете? Я смутно помню, что в более ранней версии была ошибка с покрытием.
2. @MMansour Я добавлю это в вопрос — Angular 7.1.0
3. Когда я запускал этот класс и этот тест, я не получал подсветку в том же месте, что и вы. Вместо этого это было в этой строке
return this._field.name in this._record ? this._record[this._field.name] : '';
в остальной части троичного. Не уверен, что это помогает.4. @MMansour странно… возможно, это просто проблема со Стамбулом. Я немного новичок в покрытии кода, поэтому я просто предположил, что это то, что я делаю неправильно. У меня есть отдельные тесты для покрытия этой конкретной ветки, я просто не включил их, чтобы упростить пример.
Ответ №1:
Похоже, что это открытая проблема для Стамбула. Похоже, что использование другого класса таким образом может вызвать некоторые проблемы. Одним из возможных исправлений в этом потоке является указание возвращаемого типа, подобного any
для метода. Вероятно, проблема в javascript, на который переводится TS. В javascript, вероятно, есть ветка, которой нет в вашем коде.
Комментарии:
1. Да, похоже, что это действительно может быть так … немного неприятно, но у меня нет требований к покрытию кода, установленных на 100%, поэтому я просто проигнорирую пока…