27 lines
1.1 KiB
TypeScript
27 lines
1.1 KiB
TypeScript
import { fireEvent, render, screen } from '@testing-library/react';
|
|
import { VirtualTreeViewport } from './VirtualTreeViewport';
|
|
describe('VirtualTreeViewport', () => {
|
|
it('只渲染可视窗口并在滚动后更新行', () => {
|
|
const items = Array.from({ length: 1000 }, (_, id) => ({ id, label: `节点 ${id}` }));
|
|
render(
|
|
<VirtualTreeViewport
|
|
label="大型树"
|
|
items={items}
|
|
height={100}
|
|
rowHeight={20}
|
|
overscan={1}
|
|
getKey={(item) => item.id}
|
|
renderRow={(item) => <div>{item.label}</div>}
|
|
/>,
|
|
);
|
|
const tree = screen.getByRole('tree', { name: '大型树' });
|
|
expect(screen.getByText('节点 0')).toBeVisible();
|
|
expect(screen.queryByText('节点 500')).not.toBeInTheDocument();
|
|
Object.defineProperty(tree, 'scrollTop', { configurable: true, value: 10000 });
|
|
fireEvent.scroll(tree);
|
|
expect(screen.getByText('节点 500')).toBeVisible();
|
|
fireEvent.keyDown(tree, { key: 'ArrowDown' });
|
|
expect(tree.getAttribute('aria-activedescendant')).toContain('501');
|
|
});
|
|
});
|