我似乎找不到太多/任何关于我试图实现的这个非常简单的事情的文档

我的下拉列表是display: none.当我点击一个复选框时,它变成display: block

 expect(getByLabelText('Locale')).toHaveStyle(`
  display: none;
`)

getByLabelText('Locale').checked = true

expect(getByLabelText('Locale')).toHaveStyle(`
  display: block;
`)

代码按预期工作,但在第二个expect块上测试失败,该块表示:它仍应为display: none

这种说法正确吗?

当我点击复选框时,它会将我的对象中的2个属性更新为true,这就是它在代码中呈现的方式.当我手动通过这些属性时,测试仍然失败,但在第一个预期中失败了.

我觉得我需要做setProps件事

我现在try 使用renderWithRedux,但它似乎没有正确地触发我的动作创建者?

fireEvent.click(queryByTestId('LocaleCheckbox'))是try 更新复选框的最佳 Select 吗?

推荐答案

要使用react-testing-library选中或取消选中复选框,只需选中复选框.有一个discussion about this on react-testing-library Issue #175.肯特说:

可能应该更好地记录这一点,但使用复选框,您实际上不会触发更改事件,而是应该触发单击事件.

但是,根据您上面编写的代码,标签文本为"Locale"的 node 是什么?因为如果它有style display: none,你的用户会如何点击查看它?那是打字错误吗?您应该在下拉列表中声明样式,但要单击复选框.也许我看错了,但从代码上看,您似乎在同一个 node 上执行所有断言和操作.这似乎不对.

我编写了一个CodeSandbox示例,它有一个基本的div,样式根据复选框是否被选中而设置为display: nonedisplay:block.它使用react-hooks来维持状态.

还有一个react-testing-library测试,演示如何断言样式,选中复选框,然后断言更改的样式.

测试代码如下所示:

it('changes style of div as checkbox is checked/unchecked', () => {
  const { getByTestId } = render(<MyCheckbox />)
  const checkbox = getByTestId(CHECKBOX_ID)
  const div = getByTestId(DIV_ID)
  expect(checkbox.checked).toEqual(false)
  expect(div.style['display']).toEqual('none')
  fireEvent.click(checkbox)
  expect(checkbox.checked).toEqual(true)
  expect(div.style['display']).toEqual('block')
  fireEvent.click(checkbox)
  expect(checkbox.checked).toEqual(false)
  expect(div.style['display']).toEqual('none')
})

希望这能帮你找到正确的方向.

Edit checkbox alters style

Reactjs相关问答推荐

在带有和设计的表格中禁用和取消选中复选框

如何避免react 使用ESLINTreact 挂钩/穷举-deps进行第一次呈现

Reaction Axios多部分/表单-数据数组不工作

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

带有样式的工具提示导致无法向功能组件提供参考警告

状态更改时的rtk查询触发器

为什么react日历时间轴项Renderprops 不能与useState挂钩一起使用?

如何在React组件中自动更新图表数据?

如何使用 React 获取表单中的所有值?

无法使用 Suspense 和 Await 获取数据

如何在react 中过滤数组的数组?

对于 ref 上的可见 prop 或 open 方法来react 组件,哪种方式更好?

使用登录保护 React 中的 SPA 应用程序 - 为什么这种方法不起作用?

如何在 ReactJS 中提交后删除 URL 中的查询参数

如何在 React 中使用 debounce hooks

使用 axios 响应路由 Dom 操作

自动重新获取不起作用 - RTK 查询

SonarCloud 代码覆盖率不适用于 Github Action

单击按钮时获取react 表中每一行的属性

点击提交后自动添加#