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

React Testing Library测试MUI4 Tooltip时获取SVG上title为undefined如何解决

问题原因分析
  • SVG属性取值异常
    你拿到的infoTooltip是被Tooltip包裹的SVG图标元素,SVG元素的title属性无法通过.title直接读取,必须使用getAttribute('title')方法才能获取到值,所以直接取.title会返回undefined。
  • getByTitle查询失败
    你的SVG元素设置了aria-hidden="true",React Testing Library默认查询时会忽略设置了aria-hidden的元素,所以直接调用getByTitle无法匹配到目标SVG。
解决方案

你的测试目标是验证hover后tooltip浮层展示指定文本,原测试实际校验的是SVG元素的静态属性,没有覆盖MUI Tooltip的浮层展示逻辑,推荐使用方案1完成功能测试。

方案1:测试Tooltip浮层展示效果(推荐)

首先调整组件中Tooltip的配置,给浮层添加可识别标识(也可以不加,直接用role查询):

<Tooltip
  title="Tooltip text"
  // 给MUI生成的浮层添加testid,可选配置
  PopperProps={{
    'data-testid': 'tooltip-popup'
  }}
>
  <InfoIcon/>
</Tooltip>

调整测试代码,处理MUI Tooltip的动画延迟,等待浮层渲染:

it('has a tooltip on the info icon', async () => {
  render(<Component />);
  const user = userEvent.setup();

  // 触发hover
  await user.hover(screen.getByTestId('tooltip-icon'));

  // 等待tooltip浮层渲染,MUI Tooltip浮层默认role为tooltip
  const tooltipPopup = await screen.findByRole('tooltip');
  // 校验浮层文本
  expect(tooltipPopup).toHaveTextContent('Tooltip text');
});

方案2:仅校验静态title属性(适配原有测试逻辑)

如果不需要校验浮层展示效果,只需要校验title属性存在,修改断言方式即可:

it('has a tooltip on the info icon', () => {
  render(<Component />);

  const infoTooltip = screen.getByTestId('tooltip-text', {
    // 不忽略aria-hidden的元素
    ignoreAriaHidden: false
  });
  // 用getAttribute读取SVG的title属性
  expect(infoTooltip.getAttribute('title')).toEqual('Tooltip text');
});

如果要用getByTitle查询,也需要加上ignoreAriaHidden: false配置:

const tooltipIcon = screen.getByTitle('Tooltip text', { ignoreAriaHidden: false });

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 06:06:03