You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确Mock Window函数以完成视口功能的单元测试?

你的视口Mock实现存在逻辑偏差,无法满足测试需求

兄弟,你的这个Mock方案没法准确模拟原代码的视口计算逻辑,问题出在几个关键的对应关系上:

  • 原代码里的windowTop是从$(window).pageYOffset或$(document).scrollTop获取的,但你用screenY()来模拟这个值——这俩根本不是一回事!screenY是浏览器窗口相对于屏幕顶部的位置,而pageYOffset/scrollTop是文档滚动的距离,属性含义完全不同,这样模拟会导致取值逻辑不匹配。
  • 原代码里的windowBottom是通过$(window).height() + windowTop计算出来的,但你直接把windowBottom作为height()的返回值了,这完全颠倒了逻辑。原逻辑是先拿窗口高度,再加滚动距离得到视口底部,而你的Mock相当于直接硬编码了视口底部,却没有正确模拟窗口高度这个核心参数。

修正后的Mock方案

要匹配原代码的逻辑,你应该这样调整Mock,让每个属性都对应原代码的取值来源:

var mockScrollTop = 0; // 对应原代码的windowTop
var mockWindowHeight = 500; // 窗口本身的高度

// Mock window对象的对应属性
mockedWindow = {
  pageYOffset: mockScrollTop, // 对应$(window).pageYOffset
  height: () => { return mockWindowHeight; } // 对应$(window).height()
};

// 如果原代码里会用到$(document).scrollTop,还要额外Mock document
mockedDocument = {
  scrollTop: mockScrollTop
};

这样原代码计算出来的windowBottom就是500 + 0 = 500,和你预期的结果一致,但逻辑上完全对齐了原代码的计算方式,测试结果才会准确可靠。

内容的提问来源于stack exchange,提问作者Niru

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:42:43