reactjs - 查询带有特定文本的按钮

标签 reactjs jestjs react-testing-library

我有一个(笑话)测试,以确定是否存在按钮:

it('renders a signup button', () => {
  expect(sut.getByText('Sign up for free')).toBeDefined()
})
该测试是因为组件中同时存在一个按钮和标题为“免费注册”的文本。
Screenshot showing both a heading and button with "Sign up for free" text
可以将testid添加到按钮中,但是我更喜欢遵循 react-testing-library 模拟用户行为的原则。
我认为用户希望“单击标记为“免费注册”的按钮”是合法的。在这种情况下,指定HTML元素的类型很有意义,因为<button />是用户的独特元素,而不是<h2 /><h3 />
如何查询标记为“免费注册”的按钮元素?例如,可以通过查询选择器进一步限制getByText()吗?

最佳答案

我很惊讶这里没有人提供最惯用的答案。您可以使用 getByRole() 并传递accessible name。可访问名称是按钮的文本或aria-label属性的值。
如果屏幕上显示多个具有相同角色的元素,则可用于查询特定元素。
Text button

<button>Text Button</button>
screen.getByRole('button', {
  name: /text button/i
})
Icon button
<button aria-label='edit'>
  <edit-icon />
</button>
screen.getByRole('button', {
  name: /edit/i
})

关于reactjs - 查询带有特定文本的按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58408178/

相关文章:

reactjs - React : why is double brace syntax, style{{..}},内联样式必需

javascript - 颜色不是从 Prop 渲染的

javascript - 如何在测试值或子对象之前测试父对象的存在

javascript - 如何在自定义 Hook 中测试 useEffect?

reactjs - 我可以使用 React Portal 将元素移植到任何 DOM 节点吗?

javascript - ReactJS:显示或隐藏元素仅在第一次单击按钮时有效

javascript - 在 Jest 中模拟 document.querySelector

reactjs - "TypeError: react.useContext is not a function"使用 React 测试库模拟上下文提供程序时

javascript - 如何测试 ErrorBoundary 的后备组件?

reactjs - 如何模拟 Firebase Auth 方法? ( react ,测试库)