При запуске теста транспортира они будут отключать любой компонент с помощью директивы отложенной загрузки. Protractor следит за ngZone, чтобы знать, когда ожидающие вызовы xhr, тайм-ауты и интервалы завершены перед запуском.
В scroll-listener.ts
.sampleTime(100, scheduler)
создает интервал, который никогда не заканчивается во время теста транспортира. Я нашел способ решить эту проблему, добавив следующий код в директиву
ngAfterContentInit() {
this.ngZone.runOutsideAngular(() => { // run outside angular
this.scrollSubscription = getScrollListener(this._scrollTarget)
.filter(() => this.isVisible())
.take(1)
.switchMap(() => this.loadImage(this.lazyImage))
.do(() => this.setImage(this.lazyImage))
.finally(() => this.setLoadedStyle())
.subscribe(() => this.ngOnDestroy(),
error => {
this.setImage(this.errorImg || this.defaultImg);
this.ngOnDestroy();
});
});
}
Согласно этому https://github.com/angular/protractor/issues/3349#issuecomment -232253059 Protractor наблюдает за основной ngZone, поэтому, если мы запустим интервал из нее, транспортир запустится успешно. Я не уверен, как это будет работать с тестами транспортира в этом проекте, но я могу попытаться сделать запрос на вытягивание, когда у меня будет возможность.
Спасибо за ваш отзыв.
Однако я не могу воспроизвести это. В этом проекте я использую транспортир, и он работает нормально. Но, сказав это, было бы неплохо использовать ngZone.runOutsideAngular
для повышения производительности. Но если мы используем ngZone.runOutsideAngular
, нам нужно использовать ChangeDetectorRef
после ленивой загрузки изображения, верно? Angular знает, что представление нужно отрендерить заново.
Поскольку я не могу воспроизвести это, похоже, что у вас есть рабочее решение. Вы хотите отправить PR?
Конечно, я посмотрю, смогу ли я получить его в течение следующей недели :)
Я создал новую версию плагина. Можете ли вы попробовать: npm install [email protected]
чтобы увидеть, решит ли это проблему?
Конечно! Я попробую сегодня
Закрытие этого. Дайте мне знать, если у вас все еще есть таймауты.
@tjoskar только что протестировал это сегодня, и он работает, спасибо за исправление! :)
Самый полезный комментарий
Конечно, я посмотрю, смогу ли я получить его в течение следующей недели :)