import React, { FC } from "react"; import { render, fireEvent } from "@testing-library/react"; import useCloseOnEscape from "../useCloseOnEscape"; interface Props { onKeyDown?: React.KeyboardEventHandler; disabled?: boolean; onRequestClose: () => void; } const Test: FC = ({ onKeyDown, onRequestClose, disabled = false }) => { const handleKeyDown = useCloseOnEscape(onRequestClose, disabled, onKeyDown); return
; }; describe("useCloseOnEscape", () => { it("should call the onRequestClose function when the escape key is pressed", () => { const onRequestClose = jest.fn(); const { getByTestId } = render(); const div = getByTestId("div"); fireEvent.keyDown(div, { key: " " }); fireEvent.keyDown(div, { key: "A" }); fireEvent.keyDown(div, { key: "B" }); fireEvent.keyDown(div, { key: "Enter" }); expect(onRequestClose).not.toBeCalled(); fireEvent.keyDown(div, { key: "Escape" }); expect(onRequestClose).toBeCalled(); }); it("should not trigger the onRequestClose if disabled", () => { const onRequestClose = jest.fn(); const { getByTestId } = render( ); const div = getByTestId("div"); fireEvent.keyDown(div, { key: "Escape" }); expect(onRequestClose).not.toBeCalled(); }); it("should call the onKeyDown prop if it was provided", () => { const onKeyDown = jest.fn(); const onRequestClose = jest.fn(); const { getByTestId, rerender } = render( ); const div = getByTestId("div"); fireEvent.keyDown(div, { key: "A" }); expect(onKeyDown).toBeCalled(); expect(onRequestClose).not.toBeCalled(); fireEvent.keyDown(div, { key: "Escape" }); expect(onKeyDown).toBeCalledTimes(2); expect(onRequestClose).toBeCalledTimes(1); onKeyDown.mockClear(); onRequestClose.mockClear(); rerender( ); fireEvent.keyDown(div, { key: "Escape" }); expect(onKeyDown).toBeCalled(); expect(onRequestClose).not.toBeCalled(); }); });