Jest-тест ReactJs не работает на модулях поставщика

Я пытаюсь использовать Jest в своем проекте, как показано ниже, для тестирования моего класса приложения:

it('renders correctly', () => {
  const tree = renderer
    .create(<Router><App /></Router>)
    .toJSON();
  expect(tree).toMatchSnapshot();
});

Но я получаю ошибки от модуля поставщика, и ошибка выглядит так:

   TypeError: Cannot read property 'addEventListener' of null

      at node_modules/hammerjs/hammer.js:222:16

Я понятия не имею, как это исправить

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
0
384
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Почему не работает?

renderer.create renders React components to pure JavaScript objects, without depending on the DOM or a native mobile environment.

Ссылка: https://reactjs.org/docs/test-renderer.html#testrenderercreate

Если вы видите реализацию hammerjs/hammer, вы обнаружите, что addEventListener вызывается в целевом элементе DOM после его обнаружения в визуализированном компоненте. Когда среда DOM отсутствует, целевой элемент DOM оказывается null и, следовательно, ошибкой.

Как это исправить?

If you'd like to assert, and manipulate your rendered components you can use Enzyme or React's TestUtils.

Ссылка: https://facebook.github.io/jest/docs/en/tutorial-react.html#dom-testing

Вы можете использовать Enzyme mount для полного рендеринга DOM, когда у вас есть элементы, которые взаимодействуют с DOM. http://airbnb.io/enzyme/docs/api/mount.html

Итак, это должно работать:

it('renders correctly', () => {
  const tree = mount(<Router><App /></Router>);
  expect(tree).toMatchSnapshot();
});

Другие вопросы по теме