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

测试react-infinite-scroller的loadMore方法不触发如何解决?

react-infinite-scroller 测试触发loadMore回调方案
  • 第一步:先确认你要触发滚动的容器是InfiniteScroll的直接父元素,也就是你data-testid为paginated-list-testid的PaginatedList组件必须是直接包裹InfiniteScroll的容器,并且该容器设置了固定高度 + overflow: auto/scroll属性,这是useWindow设为false时组件生效的前提。
  • 第二步:模拟滚动前先手动设置容器的三个关键尺寸属性,不能只修改scrollY:
// 先获取容器元素
const scrollContainer = screen.getByTestId('paginated-list-testid');
// 模拟容器内容总高度远大于可视高度
Object.defineProperty(scrollContainer, 'scrollHeight', { value: 10000, configurable: true });
// 模拟容器可视区域高度
Object.defineProperty(scrollContainer, 'clientHeight', { value: 1000, configurable: true });
// 设置滚动距离到接近底部,满足组件的触发阈值逻辑
scrollContainer.scrollTop = 9000;
  • 第三步:手动触发scroll事件,scrollY是window滚动场景下的属性,自定义容器滚动不需要传该参数:
fireEvent.scroll(scrollContainer);
// 如果使用React Testing Library,触发后等待异步回调执行完成再做断言
await waitFor(() => {
  // 示例断言:验证repositoryA.next方法被调用
  expect(mockRepositoryNext).toHaveBeenCalled();
});

额外注意点:

  1. 测试前要提前mock掉this.repositoryA.next方法,避免触发真实接口请求
  2. 测试执行前要确保传入的externalCondition为true,且InfiniteScroll的hasMore属性也为true,两个条件任意一个不满足时,就算滚动到底部组件也不会触发loadMore回调
  3. Jest的jsdom环境不会自动计算元素尺寸,必须手动通过defineProperty定义相关尺寸属性才会生效,这是你之前直接设置scrollY不生效的核心原因

内容的提问来源于stack exchange,提问作者Alberto Herrera Vargas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 12:36:03