javascript - 编写依赖于 `IntersectionObserver` 调用的测试

标签 javascript testing browser intersection-observer

我正在尝试编写一个测试,当元素在视口(viewport)中时断言某些内容。

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

关于javascript - 编写依赖于 `IntersectionObserver` 调用的测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54991140/

相关文章:

javascript - javascript中的递归 "parsing"函数

javascript - 获取复选框(同名)作为数组

facebook - 如何将测试用户添加到 Facebook Credits 测试人员?

testing - 从 Maven 项目创建可执行的 selenium 测试 jar

java - Mockito.when then根据输入参数返回

javascript - 将数据从浏览器 Javascript 传递到 Delphi 应用程序

url - 如何在 url 中使用 at 符号 (@)?

javascript - slider 图像在 Internet Explorer 中不起作用,但在其他浏览器中起作用

Jquery更新浏览器位置,不重定向

javascript - 正则表达式匹配模式或匹配其他所有内容 - 匹配优先级问题?