#angular #unit-testing
#angular #модульное тестирование
Вопрос:
Я хочу написать модульный тест для тестирования источника события в родительском компоненте.
html-код в родительском компоненте:
<ng-container *ngIf="canPageBeDisplayed()">
<wizard-sidebar-item-group *ngFor="let group of sidebarGroups" [sidebarItems]="group"
[isCurrentPage]="isCurrentPage" (removeItem)="removeItem($event)"></wizard-sidebar-item-group>
</ng-container>
код компонента соответствует в родительском компоненте:
public removeItem(item: SummaryItem): void {
if (item.actionState !== 'required') {
this.wizardService.updateSummaryItem(item);
}
}
Как я мог протестировать (removeItem)="removeItem($event)"
?
Комментарии:
1. Вы бы сделали то, что необходимо для того, чтобы дочерний компонент выдал такое событие, либо получив ссылку на дочерний компонент (используя debugElement) и обманув, отправив событие напрямую, либо используя пользовательский интерфейс, как это сделал бы реальный пользователь, чтобы инициировать отправку события дочерним компонентом.
Ответ №1:
Добавьте класс в свой мастер-sidebar-item-group, подобный:
<wizard-sidebar-item-group class="wizard" ... >
Тогда тест может быть чем-то вроде:
it('remove item should be triggered', () => {
fixture = TestBed.createComponent(MyParentComponent);
component = fixture.componentInstance;
fixture.detectChanges();
spyOn(component, 'removeItem');
const wizardElement = fixture.debugElement.query(By.css('.wizard'));
wizardElement.triggerEventHandler('removeItem', {});
fixture.detectChanges();
expect(component.removeItem).toHaveBeenCalled();
});