Модульное тестирование Jasmine: как получить доступ к свойству, заданному с помощью @input() ? Доступ к нему с помощью component.propertyname возвращает undefined

#angular #karma-jasmine

#angular #карма-жасмин

Вопрос:

ts-файл:

 @input() selectedDep: WebMessagingDeployments[]
 

файл спецификации:

 beforeEach(() => {

    fixture = TestBed.createComponent(DeploymentAssignmentFormComponent);
    component = fixture.componentInstance;
    
    console.log(component.selectedDep) // returns undefined
    component.selectedDep.push(mockDepData); //this line throws error. TypeError: Cannot read property '0' of undefined
}));  
 

Ответ №1:

Похоже, вы не инициализировали selectedDep ни свой компонент, ни свой тестовый файл.

Есть несколько вариантов:

  1. Инициализировать при объявлении

    @Input() selectedDep: WebMessagingDeployments[] = [];

  2. Инициализировать в тесте

    fixture = TestBed.createComponent(DeploymentAssignmentFormComponent); component = fixture.componentInstance; component.selectedDep = [/* значение здесь */]; fixture.DetectChanges();