#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);