编写依赖于 IntersectionObserver 调用的测试
Write tests that rely on `IntersectionObserver` calls
我正在尝试编写一个测试,当元素在视口中时断言某些内容。
我正在使用 IntersectionObserver
API,事实证明,当浏览器可以调用时,对观察者的调用就完成了。
所以问题是,我应该如何处理这样的断言?
我应该等 一些 时间吗?多少毫秒就足够了?
是否有一个事件可以知道浏览器何时结束调用观察者?
目前我是这样做的:
// ... do whatever to make the code observe some elements
document.scrollingElement.scrollTop = window.innerHeight;
// Wait for observer to kick in (tried 1, 5, millis, 10 seems to work)
await new Promise(resolve => setTimeout(resolve, 10));
sinon.assert.calledWith(spy, dom.querySelector(selector));
这行得通,但我想知道是否有比一段时间.
更好的等待方式
好问题,
你应该尝试使用 requestAnimationFrame
,但使用它两次。
例如:
await new Promise(resolve => requestAnimationFrame(requestAnimationFrame(resolve)))
我正在尝试编写一个测试,当元素在视口中时断言某些内容。
我正在使用 IntersectionObserver
API,事实证明,当浏览器可以调用时,对观察者的调用就完成了。
所以问题是,我应该如何处理这样的断言? 我应该等 一些 时间吗?多少毫秒就足够了? 是否有一个事件可以知道浏览器何时结束调用观察者?
目前我是这样做的:
// ... do whatever to make the code observe some elements
document.scrollingElement.scrollTop = window.innerHeight;
// Wait for observer to kick in (tried 1, 5, millis, 10 seems to work)
await new Promise(resolve => setTimeout(resolve, 10));
sinon.assert.calledWith(spy, dom.querySelector(selector));
这行得通,但我想知道是否有比一段时间.
更好的等待方式好问题,
你应该尝试使用 requestAnimationFrame
,但使用它两次。
例如:
await new Promise(resolve => requestAnimationFrame(requestAnimationFrame(resolve)))