Как провести модульное тестирование ионоприемника с угловым

#angular #unit-testing #ionic-framework #karma-jasmine

Вопрос:

У меня есть a ion-picker в моем компоненте, объявленном как:

    const picker = await this.pickerController.create({
      buttons: [
        {
          text: 'Seleccionar',
          handler: (selected) => {
            this.setDatesPerWeek(selected.week.value);
          }
        }
      ],
      columns: [
        {
          name: 'week',
          selectedIndex: this.currentWeek - 1,
          options: this.setOptionsPicker()
        }
      ],
      cssClass: 'pickerWeeks'
    });
 

Поэтому у меня есть модульный тест на создание и наличие компонента ion-picker . Но покрытие показывает, что обработчик кнопки «Seleccionar» должен быть протестирован. В моей спецификации.ts у вас есть:

   it('check picker present', (done) => {
    component.presentPicker();
    fixture.detectChanges();
    fixture.whenStable().then(() => {
      expect(pickerSpy.present).toHaveBeenCalled();
      done();
    });
  });
 

Но ИДК, как проверить обработчик кнопки внутри ионоборца. Я попытался нажать кнопку и нажать кнопку с усилием, но в var кнопки я получил значение null. У кого-нибудь есть идеи о том, как охватить эту функцию?

введите описание изображения здесь

Ответ №1:

Вы можете имитировать нажатие на кнопку выбора, используя API-интерфейс jasmine spy. После щелчка вы можете проверить ожидаемый результат.

 it('set dates when Seleccionar button of picker clicked', async () => {
   component.presentPicker();
   fixture.detectChanges();
   await fixture.whenStable();
   const buttons = pickerCtrlSpy.create.calls.first().args[0].buttons;
   const selectButton = buttons.find(btn => btn.text === 'Seleccionar');

   await selectButton.handler();

   expect(this.datePerWeek).toEqual(expectedValue)
});
 

Комментарии:

1. кажется, что pickerSpy.present.calls.first().args ничего не имеет. Почему это происходит?. Мой шпион объявлен как const pickerSpy = jasmine.createSpyObj('Picker', ['present']);

2. И шпион контролера : const pickerCtrlSpy = jasmine.createSpyObj('PickerController', ['create']); pickerCtrlSpy.create.and.callFake(() => pickerSpy);