我有一个React组件,它生成一个按钮,其内容包含如下<span>个元素:

function Click(props) {
    return (
        <button disable={props.disable}>
            <span>Click me</span>
        </button>
    );
}

我想用react-testing-librarymocha+chai来测试这个组件的逻辑.

我目前遇到的问题是,getByText("Click me") Select 器返回<span> DOM node ,但对于测试,我需要判断<button> node 的disable属性.处理此类测试用例的最佳实践是什么?我看到了一些解决方案,但它们听起来都有点不对劲:

  1. data-test-id表示<button>元素
  2. Select <Click />组件的一个祖先,然后在此范围内 Select 按钮within(...)
  3. fireEvent点击所选元素,并判断是否没有发生任何事情

你能建议一个更好的方法吗?

推荐答案

Assert if button is disabled

你可以用toHaveAttributeclosest来测试它.

import { render } from '@testing-library/react';

const { getByText } = render(Click);
expect(getByText(/Click me/i).closest('button')).toHaveAttribute('disabled');

还是toBeDisabled

expect(getByText(/Click me/i).closest('button')).toBeDisabled();

Assert if button is enabled

要判断按钮是否已启用,请使用not,如下所示

expect(getByText(/Click me/i).closest('button')).not.toBeDisabled();

Reactjs相关问答推荐

未捕获的类型错误:类型Orbitum创建者未定义

Shadck/ui Select -当用户 Select 项目时更改状态

TypeError:SearchProduct.get()获得了意外的关键字参数查询'

React中的useEffect钩子

React-React中是否完全支持基于类的组件?

蚂蚁 Select .列表弹出窗口不会';有时不会出现

将 useRef 与 useImperativeHandle 一起使用时,React 不会重新渲染

在 React 中将 MUI 样式外包到单独的文件中?

React Router v6 路径中的符号

如何修改 react/jsx-no-useless-fragment 规则以允许 <>{children}

在 React-Select 中显示多值的倒序

状态链接未传递到路由页面

单元测试 useLoaderData() react-router v6 加载器函数

在 Formik 表单中访问子组件的值

导航到屏幕时,react 本机上下文状态变为未定义

setState 改变对象引用

如何根据react 中的 map 功能一次只打开一个弹出窗口?

使用 useRef(uuid()) 的目的是什么?

在 React 中使用使用状态挂钩合并两个数组

我想将悬停 colored颜色 更改为红色.写了一个话题,这个元素没有react ,怎么解决呢?