reactjs - fireEvent.keyDown 在我的 Jest + React 测试库测试中没有按预期工作

标签 reactjs jestjs material-ui react-testing-library

在我当前的 React 项目中,我正在测试一个组件,其中包含作为子组件的 Dialog component from Material UI .

假设它必须运行 onClose()当用户按下 Esc 时的功能 key 。我手动测试了它,它运行得非常好。现在我正在做同样的测试,这次使用 Jest + React 测试库 .你可以看到下面的代码:

fireEvent.keyDown(container, {
      key: "Escape",
      code: "Escape",
      keyCode: 27,
      charCode: 27
    });

并且测试没有通过。经过一些调试后,我意识到该事件实际上是被触发的,但由于某种原因对 <Dialog/> 没有影响。成分。

所以我确实在 Google Chrome 上运行了该组件,并使用以下代码从开发工具控制台触发了相同的事件:
document.dispatchEvent(
    new KeyboardEvent(
        "keydown", {     
            key: "Escape",
            code: "Escape",
            keyCode: 27,
            charCode: 27
        }
    )
);

......它也不起作用。

我该怎么做才能通过此测试?

最佳答案

用户 JMadelaine 是对的,我发现了什么是错的。事件目标不应是 container也不是 document ,但对话框本身。所以现在我已经改变了代码:

fireEvent.keyDown(container, {
      key: "Escape",
      code: "Escape",
      keyCode: 27,
      charCode: 27
});

...到这个:
fireEvent.keyDown(getByText(/the text in the dialog box/i), {
      key: "Escape",
      code: "Escape",
      keyCode: 27,
      charCode: 27
});


它有效。

关于reactjs - fireEvent.keyDown 在我的 Jest + React 测试库测试中没有按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59572341/

相关文章:

jestjs - 一个文件中的测试是否在 Jest 中并行运行?

javascript - react : Edit and Delete from a pop-up menu on a list item

javascript - 在 React Native 中检测来自 WebView 的按钮点击

javascript - 类型错误 : Illegal Invocation

reactjs - 使用 Lodash 在 React 中进行数据过滤

javascript - React.js : How to use the same button while passing variables to a click function

reactjs - Material-UI:一个组件正在将 SwitchBase 不受控制的检查状态更改为受控

reactjs - 如何使用 useEffect 从 Redux 存储中的状态更新 React UI

mocking - jest.mock 与命名导出如何监视

graphql - 我怎样才能 spyOn `useMutation` 以便我可以看到正在传递的值是什么?