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

使用react-testing-library测试listbox组件的方法及示例咨询

React Testing Library 测试 Listbox 组件示例

以下示例覆盖查看选项列表、选择选项两类核心测试场景,你可以根据你的组件实际props调整适配:

前置准备

测试前先导入必要的测试工具和你的Listbox组件:

import { render, screen, fireEvent } from '@testing-library/react';
import Listbox from './你的Listbox组件路径';

我们假设你的Listbox组件接收三个核心props:

  • options:选项数组,每一项包含label(展示文本)和value(选项值)
  • onChange:选项变化时的回调函数
  • multiple:可选,是否支持多选,默认false

测试场景1:验证选项列表正常渲染展示

这个测试用来确认所有传入的选项都能正常展示在页面上,不会出现漏渲染的情况:

test('listbox 渲染所有传入的选项', () => {
  // 构造测试用选项
  const testOptions = [
    { label: '选项1', value: '1' },
    { label: '选项2', value: '2' },
    { label: '选项3', value: '3' },
  ];

  render(<Listbox options={testOptions} onChange={() => {}} />);

  // 遍历验证每个选项的文本都存在于页面中
  testOptions.forEach(option => {
    expect(screen.getByText(option.label)).toBeInTheDocument();
  });
});

测试场景2:验证单选场景下选择功能正常

这个测试用来确认点击选项后,能正确选中目标选项,且回调函数能拿到正确的选中值:

test('单选listbox点击选项后正确触发选中逻辑', () => {
  const testOptions = [
    { label: '选项1', value: '1' },
    { label: '选项2', value: '2' },
  ];
  // 构造mock回调函数用来监听选中结果
  const mockOnChange = jest.fn();

  render(<Listbox options={testOptions} onChange={mockOnChange} />);

  // 模拟点击选项2
  fireEvent.click(screen.getByText('选项2'));

  // 验证回调函数被调用,且拿到的选中值正确
  expect(mockOnChange).toHaveBeenCalledWith('2');
  // 如果你的组件选中后会给选项加选中态的类名或者aria属性,可以加如下验证,比如aria-selected
  expect(screen.getByText('选项2')).toHaveAttribute('aria-selected', 'true');
  expect(screen.getByText('选项1')).toHaveAttribute('aria-selected', 'false');
});

测试场景3:验证多选场景下选择功能正常(如果你的组件支持多选)

如果你的Listbox支持多选,可以用这个测试验证多选项选中、取消选中的逻辑:

test('多选listbox支持同时选中多个选项', () => {
  const testOptions = [
    { label: '选项1', value: '1' },
    { label: '选项2', value: '2' },
    { label: '选项3', value: '3' },
  ];
  const mockOnChange = jest.fn();

  render(<Listbox options={testOptions} onChange={mockOnChange} multiple />);

  // 模拟依次点击选项1和选项3
  fireEvent.click(screen.getByText('选项1'));
  fireEvent.click(screen.getByText('选项3'));

  // 验证回调最后拿到的是两个选中值的数组
  expect(mockOnChange).toHaveBeenLastCalledWith(['1', '3']);
  // 验证两个选项的选中态正确
  expect(screen.getByText('选项1')).toHaveAttribute('aria-selected', 'true');
  expect(screen.getByText('选项3')).toHaveAttribute('aria-selected', 'true');
  expect(screen.getByText('选项2')).toHaveAttribute('aria-selected', 'false');
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 15:24:01