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

Jest模拟滚动后无法查找到ScrollToTop组件元素问题咨询

问题原因

测试不生效核心有两个问题:

  • 组件判断滚动高度用的是window.pageYOffset,但你触发scroll事件时仅设置了scrollY,Jest/jsdom环境下这两个属性不会自动同步
  • fireEvent.scroll仅触发绑定的scroll事件回调,不会自动修改window对应的滚动属性值,必须手动给window.pageYOffset赋值后再触发事件
修正后的测试代码
import React from 'react';
import { render, screen, fireEvent } from '@testing-library/react';
import ScrollToTop from '../ScrollToTop';

describe('ScrollToTop', () => {
    // 每次测试结束重置pageYOffset,避免污染其他用例
    afterEach(() => {
        window.pageYOffset = 0;
    });

    test('Renders ScrollToTop with aria-label', async () => {
        render(<ScrollToTop aria-label="Go to the top" />);
        // 先手动设置pageYOffset的值为超过阈值的高度
        window.pageYOffset = 1000;
        // 再触发scroll事件执行toggleVisibility逻辑
        fireEvent.scroll(window);
        const testy = await screen.findByLabelText('Go to the top');
        // 用toBeInTheDocument比toBeDefined更符合DOM存在性校验的最佳实践
        expect(testy).toBeInTheDocument();
    });
});
额外补充说明

如果你的测试环境jsdom版本较低,修改属性后依然没有触发状态更新,可以在触发scroll事件后加一行await waitFor(() => {})等待React状态更新完成即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 15:39:03