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

使用test-library的screen校验含is-disabled的div时toBeDisabled报错如何解决

问题原因
  • toBeDisabled 是React Testing Library配套断言库提供的API,仅会识别元素的原生disabled属性、符合规范的表单元素禁用状态,以及aria-disabled="true"属性,无法识别自定义类名实现的禁用样式
  • 你当前选中的是外层的<div>元素,该元素本身不属于原生可交互元素,就算添加disabled属性也不会被toBeDisabled识别;实际可交互的按钮是内层的<a>标签,禁用状态目前仅通过外层的is-disabled类名实现,没有配套的无障碍属性
解决方案

分两种场景处理:

场景1:可修改组件源码(优先推荐)

给可交互的<a>标签添加符合无障碍规范的禁用属性,点击事件中同时阻止禁用状态下的交互行为:

// 组件内逻辑
const isDisabled = true // 你的禁用判断逻辑
return <a 
  className={`bar-button ${isDisabled ? 'is-disabled' : ''}`}
  aria-disabled={isDisabled}
  onClick={e => {
    if (isDisabled) e.preventDefault()
    // 原有点击逻辑
  }}
>
  {/* 原有子元素 */}
</a>

测试代码调整为直接断言可交互的按钮元素:

// test.ts
const button = screen.getByText('I am action Button').closest('a')
expect(button).toBeDisabled()

场景2:无法修改组件源码,仅能适配现有实现

直接断言对应元素是否包含禁用类名即可:

// test.ts
const buttonWrapper = screen.getByText('I am action Button').closest('div.menu')
expect(buttonWrapper).toHaveClass('is-disabled')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 14:15:03