Angular это популярный JavaScript фреймворк, который используют многие веб разработчики, наряду с React и Vue. При создании приложений на нем (как и на любом другом) очень важно покрывать код юнит тестами. Во многих командах разработчиков есть стандарт по минимальному проценту покрытия кода тестами.

Рассмотрим гипотетическую ситуацию, когда может потребоваться покрыть тестами функцию-аргумент для forwardRef при имплементации интерфейса ControlValueAccessor. Предположим, что вы фриланс веб разработчик, пишете на Angular и попали на проект в компанию или команду, где есть очень жесткий минимальный стандарт по тестам в 90%.

У вас есть очень простой компонент, который имплементирует интерфейс ControlValueAccessor. В декораторе компонента должна быть приблизительно такая строчка:

providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => NameOfTheComponent) }]

Класс этого компонента настолько простой, что содержит всего пару методов. Другими словами, вы не сможете достичь 90% покрытия по функциям если не покроете еще ту которая передается в forwardRef.

Чтобы покрытие по функциям охватывал и forwardRef, нужно всего лишь инжектировать провайдер NG_VALUE_ACCESSOR в ваши тесты. Это можно сделать, например так:

beforeEach(() => {
    fixture = TestBed.createComponent(NameOfTheComponent);
    component = fixture.componentInstance;
    fixture.debugElement.injector.get(NG_VALUE_ACCESSOR);
    fixture.detectChanges();
});

В этом случае code coverage по функциям в тестах сразу позеленеют, но следует отметить, что такой код едва ли что-то тестирует, его полезность исключительно искусственная, чтобы помощь вам формально преодолеть минимальный порог.





Добавить комментарий

Ваш адрес email не будет опубликован.