React - Jest - Тест по предотвращению действия по умолчанию - PullRequest
2 голосов
/ 28 февраля 2020

Я не знаю, как проверить событие нажатия клавиши и предотвратить дефолт. Тест достиг кода, но preventDefault никогда не вызывался: Received number of calls: 0

Реагирующий компонент - Приложение. js

  const onKeyDown = e => {
      console.log("==== TEST REACHED HERE ====")
      e.preventDefault(); // NEVER CALLED ???
  };
  useEffect(() => {
    document.addEventListener("keydown", onKeyDown, false);
    return () =>
      document.removeEventListener("keydown", onKeyDown, false);
  }, []);

Юнит-тест

it("should prevent default action on key down", () => {
   const { getByRole } = render(<App {...props} />);
   const grid = getByRole("app");
   const mockEvent = { preventDefault: jest.fn() };
   fireEvent.keyDown(grid, mockEvent);
   expect(mockEvent.preventDefault).toHaveBeenCalledTimes(1);
});

enter image description here

1 Ответ

1 голос
/ 29 февраля 2020

Похоже, вы не можете смоделировать preventDefault свойство события с библиотекой реагирующего тестирования.

В ловушке fireEvent вызывает dispatchEvent, так что вы можете воспользоваться тем, что вызов event.preventDefault возвращает false, если событие отменено:

it("should prevent default action on key down", () => {
   const { getByRole } = render(<App {...props} />);
   const grid = getByRole("app");
   const isPrevented = fireEvent.keyDown(grid);
   expect(isPrevented).toBe(false);
});
...