测试使用 IntersectionObserver 的代码

2024-04-10

我的应用程序中有一个处理无限滚动分页的 JavaScript 组件,我正在尝试重写它以使用IntersectionObserver,如上所述here https://developers.google.com/web/updates/2016/04/intersectionobserver,但是我在测试它时遇到了问题。

有没有办法在 QUnit 测试中驱动观察者的行为,即用我的测试中描述的一些条目触发观察者回调?

我提出的一个可能的解决方案是在组件的原型中公开回调函数并在我的测试中直接调用它,如下所示:

InfiniteScroll.prototype.observerCallback = function(entries) {
    //handle the infinite scroll
}

InfiniteScroll.prototype.initObserver = function() {
    var io = new IntersectionObserver(this.observerCallback);
    io.observe(someElements);
}

//In my test
var component = new InfiniteScroll();
component.observerCallback(someEntries);
//Do some assertions about the state after the callback has been executed

我不太喜欢这种方法,因为它暴露了组件使用IntersectionObserver在内部,我认为这是一个实现细节,客户端代码不应该看到它,那么有没有更好的方法来测试它(最好不使用 jQuery)?


由于我们正在使用 TypeScript 和 React (tsx) 的配置,所以发布的答案都不适合我。这是最终起作用的:

beforeEach(() => {
  // IntersectionObserver isn't available in test environment
  const mockIntersectionObserver = jest.fn();
  mockIntersectionObserver.mockReturnValue({
    observe: () => null,
    unobserve: () => null,
    disconnect: () => null
  });
  window.IntersectionObserver = mockIntersectionObserver;
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

测试使用 IntersectionObserver 的代码 的相关文章

随机推荐

  • 你如何处理NUL?

    当我们谈论 NULL 时 我有时会遇到与其他程序员的沟通问题 现在 NULL 可以是 空指针NUL 字符某种数据库中的空数据元素 NUL 似乎是最令人困惑的 它是 ASCII 字符 0x00 我倾向于在代码中使用 0 来表示它 我小组中的一
  • 如何获取 JavaScript 对象的类?

    我创建了一个 JavaScript 对象 但是如何确定该对象的类 我想要类似于Java的东西 getClass 方法 没有与 Java 完全对应的东西getClass http docs oracle com javase 7 docs a
  • 瞬态部分NameKeyPath & NSSortDescriptor NSFetchedResultsController

    我在核心数据中有一个任务列表 我使用 NSFetchedResultsController 将它们提取到 UITableView 中 我需要自定义订单中的自定义部分 OVERDUE ACTIVE ONGOING 推迟 完全的 为了确定任务应
  • Delphi:30 天试用

    如何为我的应用程序提供 30 天试用期 我需要允许用户仅使用应用程序 30 天 这几天怎么算 我将第一个和最后一个日期保存在注册表中 但如果更改系统时间 则不会有任何保护 我需要数一下这30天 您可能会想出一个需要互联网连接的系统 但如果没
  • 告诉 Iron Router 不要拦截链接

    我正在将相当大的应用程序迁移到 Iron Router 在客户端 所有未知路由都被重定向到 404 此外 有些路由是从服务器端管理的 例如 static 仅通过中间件显示静态页面 问题是 Iron Router 现在拦截所有链接点击 所以当
  • 通过 Azure AD Graph API 作为电子邮件别名发送电子邮件

    在 Graph API 浏览器中 您可以使用端点发送电子邮件 https graph microsoft com v1 0 me sendMail https graph microsoft com v1 0 me sendMail和一个基
  • 如何生成一定范围内的加密安全随机整数?

    我必须为生成密码的程序生成给定范围内的统一 安全的随机整数 现在我用这个 RNGCryptoServiceProvider rng new RNGCryptoServiceProvider byte rand new byte 4 rng
  • ASP.NET MVC GetFullHtmlFieldId 未返回有效 ID

    我已经看过了 但它对我没有帮助 GetFullHtmlFieldId 返回错误的 id 属性值 https stackoverflow com questions 15457883 getfullhtmlfieldid returning
  • Excel 中的排序保持风格?

    我得到了一个带有交替背景的 Excel 文件 以提高可读性 Row 1 White Background Row 2 Gray Background Row 3 White Backgrund 我使用 VBA 函数对 Excel 文件的内容
  • Rust 中模式匹配中的类型注释?

    我正在深入研究 Rust 特别是优雅地处理错误 但我在类型推断方面遇到了一些麻烦 extern crate mysql use mysql as my fn main my test fn my test gt Result lt my E
  • Oracle SQL 将日期格式从 DD-Mon-YY 转换为 YYYYMM

    我要比较 2 个表中的日期 但问题是一个表的日期采用 DD Mon YY 格式 另一个表的日期采用 YYYYMM 格式 我需要将它们都设为 YYYYMM 进行比较 我需要创建这样的东西 SELECT FROM offers WHERE of
  • 为什么元素在警报之前不显示?

    在这个简单的例子中https jsfiddle net 4rsje4b6 1 https jsfiddle net 4rsje4b6 1 为什么是 test在警报出现之前元素未显示 jQuery 不应该吗 css 方法是同步的吗 test
  • 如何告诉 TSC 脚本文件不会共享作用域并忽略重新声明

    问题 疑问 我正在使用 VSCode 的 TS 驱动的 JS 检查功能来对一堆 JS 文件进行类型检查 这些文件将通过以下方式导入
  • 如何制作具有部分透明边框的任意大小的 html 元素?

    考虑下图 这应该看起来像一片边缘粗糙 有斑点 的草 这是一张 200x200 像素的 png 图像 边缘具有透明度以提供自然的外观 问题是 我正在尝试设计一个网页 我希望所有不同尺寸的各种元素都具有此背景 但我无法使用简单的 css 背景属
  • 如何向 Android 应用程序提供 Jacoco 代理?

    我正在尝试使用 Jacoco 进行手动测试来获得代码覆盖率 我正在尝试使用离线仪器 http www eclemma org jacoco trunk doc offline html http www eclemma org jacoco
  • 如何创建自己的 Haar 级联分类器以进行自定义对象检测? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想检测汽车 但可用的 xml 文件对于准确检测来说不太强大 如何创建自定义 xml 文件 我可以为任何对象创建 任何帮助 将不胜感激
  • 如何使用 JQuery 访问 WTForm

    我想请求有关访问 WTForm 字段的帮助 我有以下表格 class model bolt InputForm FlaskForm Bolt Inputs bolt size SelectField Bolt size mm choices
  • 动态初始化

    C 03标准 basic start init 第3点 states 是否动态是实现定义的 命名空间对象的初始化 8 5 9 4 12 1 12 6 1 作用域是在 main 的第一个语句之前完成的 如果 初始化被推迟到第一次之后的某个时间
  • 如何在使用 jQuery 添加新行时刷新简单的数据表

    我认为这个很简单 但我找不到与 ajax 加载的数据或数组中提供的数据无关的参考 我在现有的 HTML 表上使用 DataTables 基本代码如下 table wizard dataTable lengthChange false iDi
  • 测试使用 IntersectionObserver 的代码

    我的应用程序中有一个处理无限滚动分页的 JavaScript 组件 我正在尝试重写它以使用IntersectionObserver 如上所述here https developers google com web updates 2016