如何使用 Jest 测试 Angular 8 中的 scrollTop 事件?
How to test a scrollTop event in Angular 8 with Jest?
我这两天一直在寻找测试 scrollTop 事件的解决方案,但我没有在任何地方找到解决方案。我所有的尝试都返回了相同的错误...
TypeError: Cannot read property 'scrollTop' of undefined
header.component.ts
@HostListener('window:scroll', ['$event'])
onWindowScroll(): void {
if(document.scrollingElement.scrollTop > 63){
this.headerElement.classList.add('height-63');
}else{
this.headerElement.classList.remove('height-63');
}
}
header.component.spec
it('should test scrollTop', () => {
window.scrollTo(0, 500);
//document.scrollingElement.scrollTop = 500 --> I already tried to set the scrollTop value
fixture.detectChanges();
component.onWindowScroll();
expect(fixture.debugElement.nativeElement.querySelector('.height-63')).toBeTruthy();
});
好的朋友,我找到了解决办法!
我这样做的方式不可能继续......所以我决定改变我检查卷轴的方式并且它起作用了!
我改
if(document.scrollingElement.scrollTop > 63)
到
if(window.pageYOffset > 63)
结果是这样的:
header.component.ts
@HostListener('window:scroll', ['$event'])
onWindowScroll(): void {
if(window.pageYOffset > 63){
this.headerElement.classList.add('height-63');
}else{
this.headerElement.classList.remove('height-63');
}
}
header.component.spec
it('should test HostListener', () => {
component.onWindowScroll();
expect(fixture.debugElement.nativeElement.querySelector('.height-63')).not.toBeTruthy();
window = Object.assign(window, { pageYOffset: 100 });
component.onWindowScroll();
expect(fixture.debugElement.nativeElement.querySelector('.height-63')).toBeTruthy();
});
谢谢!
我这两天一直在寻找测试 scrollTop 事件的解决方案,但我没有在任何地方找到解决方案。我所有的尝试都返回了相同的错误...
TypeError: Cannot read property 'scrollTop' of undefined
header.component.ts
@HostListener('window:scroll', ['$event'])
onWindowScroll(): void {
if(document.scrollingElement.scrollTop > 63){
this.headerElement.classList.add('height-63');
}else{
this.headerElement.classList.remove('height-63');
}
}
header.component.spec
it('should test scrollTop', () => {
window.scrollTo(0, 500);
//document.scrollingElement.scrollTop = 500 --> I already tried to set the scrollTop value
fixture.detectChanges();
component.onWindowScroll();
expect(fixture.debugElement.nativeElement.querySelector('.height-63')).toBeTruthy();
});
好的朋友,我找到了解决办法! 我这样做的方式不可能继续......所以我决定改变我检查卷轴的方式并且它起作用了!
我改
if(document.scrollingElement.scrollTop > 63)
到
if(window.pageYOffset > 63)
结果是这样的:
header.component.ts
@HostListener('window:scroll', ['$event'])
onWindowScroll(): void {
if(window.pageYOffset > 63){
this.headerElement.classList.add('height-63');
}else{
this.headerElement.classList.remove('height-63');
}
}
header.component.spec
it('should test HostListener', () => {
component.onWindowScroll();
expect(fixture.debugElement.nativeElement.querySelector('.height-63')).not.toBeTruthy();
window = Object.assign(window, { pageYOffset: 100 });
component.onWindowScroll();
expect(fixture.debugElement.nativeElement.querySelector('.height-63')).toBeTruthy();
});
谢谢!