У меня есть директива с настраиваемыми debounce декораторами. Это довольно простая директива, которая прослушивает событие «scroll».
export class MyScrollDirective {
@Output() scrolled = new EventEmitter<any>();
@HostListener('scroll', ['$event'])
//debouce is added to prevent multiple call when scroll reach the end
//in the if statement below
@myDebounce(300)
onScroll(event) {
this.scrolled.emit(null);
}
}
В моем тесте я предполагаю, что this.scrolled.emit()
будет вызываться всякий раз, когда вызывается onScroll
. Очевидно, что это не так.
С противодействием похоже, что onScroll
может вызываться несколько раз из spyOn
, а this.scrolled
генерировать только один раз. Например, если я запускаю события прокрутки 2 раза в моем тесте с интервалами 300 мс, onScroll
вызывается 2 раза, а this.scrolled
имеет только 1 emit . 1 испускание, конечно, желательное поведение, но почему onScroll
вызывается дважды. Когда приложение фактически запущено в браузере - вместо тестов - onScroll
на самом деле вызывается только один раз.
Почему это?!
Детали теста можно просмотреть на StackBliz.io