如何使用react-testing-library在容器内的元素上触发fireEvent.scroll?

Eyl*_*len 15 reactjs jestjs react-testing-library

我正在尝试模拟div中包含的元素的滚动,这是传递给render函数的元素。

我正在尝试这样的事情,但是随着下一个expect下降,div似乎没有滚动。

const content = (
      <div style={{display: 'flex'}}>
        <LazyList itemRenderer={itemRenderer} items={items} minItemHeight={MIN_ITEM_HEIGHT} />
      </div>
    );
mockOffsetSize(WIDTH, HEIGHT);

const {debug, container, queryByText} = render(content);
const scrollContainer = container.querySelector('.ReactVirtualized__Grid');
debug(scrollContainer);
fireEvent.scroll(scrollContainer, {y: 100});
debug(scrollContainer);
Run Code Online (Sandbox Code Playgroud)

这是触发滚动事件的正确方法吗?还有其他选择吗?

San*_*tas 8

您是否尝试将 EventListener 添加到滚动容器中?我只是不确定您可能刚刚使用的那个库,但我很确定,在正常情况下,在没有侦听器的情况下调用 scroll fireEvent 不会执行任何操作。在您的 之前fireEvent,插入如下内容:

scrollContainer.addEventListener('scroll', () => { /* some callback */ });
Run Code Online (Sandbox Code Playgroud)

并将您的 fireEvent 更改为:

fireEvent.scroll(scrollContainer, { target: { scrollY: 100 } });
Run Code Online (Sandbox Code Playgroud)

  • `scrollY` 和 `scrollX` 仅存在于 `window` 对象上,我使用 `scrollTop` 和 `scrollLeft` 使其与 html 元素一起使用。 (4认同)
  • @Eylen 是添加到容器本身的侦听器还是“窗口”侦听器?如果是这样,您可以`fireEvent.scroll(window, { target: {scrollY: 100 } })`或`fireEvent.scroll(global, { target: {scrollY: 100 } })` (3认同)