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

如何在Jest React测试中触发数字输入框的上下微调按钮

测试数字输入框上下微调按钮的方法

数字输入框的上下微调按钮(对应spinbutton角色)在浏览器中,点击操作本质上会触发ArrowUp/ArrowDown键盘事件来改变值,因此可以通过模拟这些键盘事件完成测试。

测试示例代码

test("renders and updates NumberInput with spin buttons", () => {
  let value = "5";
  const setValue = (e) => value = e.value;

  render(<NumberInput
    label="Quantity"
    name="quantity"
    value={value}
    onChange={setValue}
    step={0.5}
    min={0.05}
  />);

  const element = screen.getByRole('spinbutton');
  expect(element).toBeInTheDocument();

  // 模拟点击向上微调按钮(触发ArrowUp事件)
  fireEvent.keyUp(element, { key: 'ArrowUp' });
  expect(value).toEqual("5.5");

  // 模拟点击向下微调按钮(触发ArrowDown事件)
  fireEvent.keyUp(element, { key: 'ArrowDown' });
  expect(value).toEqual("5");

  // 测试最小值边界:达到最小值后向下微调不再变化
  value = "0.05";
  // 重新渲染组件更新受控值
  render(<NumberInput
    label="Quantity"
    name="quantity"
    value={value}
    onChange={setValue}
    step={0.5}
    min={0.05}
  />);
  const minElement = screen.getByRole('spinbutton');
  fireEvent.keyUp(minElement, { key: 'ArrowDown' });
  expect(value).toEqual("0.05");
});

关键说明

  • 使用fireEvent.keyUp模拟ArrowUp/ArrowDown事件,这是浏览器处理微调按钮点击的原生逻辑映射。
  • 若组件为受控组件,手动修改value后需要重新渲染组件,才能测试min/max这类边界场景。
  • 确保组件正确处理step、min属性,否则模拟事件无法得到预期结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 15:15:16