javascript - 如何在整个文档页面上测试弹出窗口的 onKeyDown 事件?

标签 javascript reactjs unit-testing testing enzyme

我有一个弹出窗口,我想测试一下当我按下键盘上的 ESC 时弹出窗口会关闭。该功能有效,但我想让我的测试通过。我不知道如何在整个文档上模拟 keyDown 按下,而不仅仅是模态弹出组件。

这是我现在的测试:

  test("it should call the onKeyDown handler on key ESC press", () => {
    const onKeydownSpy = jest.fn();
    const component = mount(
      <div id="wrapper">
        <Modal
          isOpen={false}
          portalParent="#wrapper"
          onClose={() => {}}
          id="123"
        >
          <p>Modal</p>
        </Modal>
      </div>
    );

    component.simulate("keydown", { keyCode: 27 });
    expect(onKeydownSpy).toHaveBeenCalledTimes(1);
    expect(onKeydownSpy).toHaveBeenCalledWith(0);
  });

这是我的代码:

  const handleKeyDownEvent = useCallback(event => {
    if (event.keyCode === 27) {
      onClose();
    }
  }, []);

  useEffect(() => {
    if (isOpen) {
      document.addEventListener("keydown", handleKeyDownEvent);
    } else {
      document.removeEventListener("keydown", handleKeyDownEvent);
    }
  }, [handleKeyDownEvent, isOpen]);

提前致谢,如果您需要更多信息,请告诉我

最佳答案

我认为您遇到的问题是文档或其中一个子元素需要具有当前的“焦点”,如果您在发送 esc 键之前检查它,您会得到什么:

document.hasFocus();

通常你可以:

document.focus();

在发出你的 key 之前。

关于javascript - 如何在整个文档页面上测试弹出窗口的 onKeyDown 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59363077/

相关文章:

javascript - 我想将 div 的可见性更改为可见,默认情况下它是隐藏的

javascript 将回车符添加到字符串以提高可读性

reactjs - 无法让 webpack require.ensure 分块方法与 react 路由器一起使用并生成单独的捆绑文件

Java List.contains 具有 double 和公差的对象

javascript - 如何添加从 JSON 文件中获取图像,添加类并追加到 div 中?

javascript - 我不能发布到谷歌?

css - 如何使用 css 更改表格的样式?

javascript - `window.gapi` gmail javascript 库不工作

java - 适当的方法封装用于单元测试

c++ - 如何使用指针参数模拟方法