编写依赖于IntersectionObserver调用的测试

时间:2019-03-04 20:35:46

标签: javascript testing browser intersection-observer

我正在尝试编写一个在元素处于视口中时断言某些内容的测试。

我正在使用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));

这可行,但是我想知道是否还有比一段时间更好的等待。

1 个答案:

答案 0 :(得分:1)

好问题, 您应该尝试使用requestAnimationFrame,但要使用两次。

例如:

await new Promise(resolve => requestAnimationFrame(requestAnimationFrame(resolve)))