Как протестировать колбэк внутри стрелочной функции?
private initRangeSlider(): Presenter {
// ...
this.view.changeSettingsObserver.addObserver((settings: ISettings) => {
this.model.updateSettings(settings); // Uncovered Line #s
});
return this;
}
Upd: стороки с комментом // добавлено
describe('private initRangeSlider', () => {
it('should call inner functions', () => {
document.body.innerHTML = '<div id="range-slider"></div>';
const model = new Model(settings);
const view = new View('#range-slider', settings);
const presenter = new Presenter(model, view);
const addObserverSpy = jest.spyOn(presenter.view.changeSettingsObserver, 'addObserver');
/**
* обнуляем массив обзерверов для теста метода 'initRangeSlider'
* т.к. туда добавляется обзервер при создании экземляра Presenter
*/
presenter.view.changeSettingsObserver.observers = []; // добавлено
presenter['initRangeSlider']();
expect(addObserverSpy).toBeCalled();
/**
* после выполнения presenter['initRangeSlider']();
* в массиве обзерверов должен быть обзервер
* т.е. длинна массива обзерверов должна быть больше 0
*/
const { observers } = presenter.view.changeSettingsObserver; // добавлено
expect(observers.length).toBeGreaterThan(0); // добавлено
});
});
Функция addObserverSpy вызывается, но при этом coverage показывает что не покрыт внутрений колбэк. вероятно потому что он не вызывается в этом методе, а только добавляется в массив обзерверов. И мне не понятно как это тестировать. Нужно проитись по массиву обзерверов и проверить что туда добавилась именно этот метод? Так это наверно должно быть в тестах модуля observer?
Как протестировать эту this.model.updateSettings(settings) строку?
Ответы (1 шт):
Автор решения: Иван Хорошевский
→ Ссылка
Возможно стоит запомнить контекст до выполнения стрелочной функции?
private initRangeSlider(): Presenter {
// ...
let that = this;
this.view.changeSettingsObserver.addObserver((settings: ISettings) => {
that.model.updateSettings(settings); // Uncovered Line #s
});
return this;
}