В настоящее время я пишу модульные тесты для компонента реакции в своем приложении. Компонент React использует API DOM, например document.getElementById (). Когда я использую shallow () или mount () из фермента, я получаю сообщение об ошибке, указывающее, что объект документа имеет значение NULL:
Я думал, что шутка уже идет с jsdom как безголовый браузер. Как я могу исправить эту проблему для доступа к поддельному объекту dom?
Прежде всего, компонент предпочтительно не должен использовать DOM напрямую, потому что это влияет на тестируемость и SSR. Rven, если он использует, предпочтительно использовать относительные запросы, а не document
.
JSDOM - это не браузер без головы, а среда Node.js, которая имитирует среду браузера.
Шутка использует JSDOM по умолчанию. document
не может быть null
, если он не был специально назначен ему где-то. Если Jest был настроен так, чтобы не использовать JSDOM, он выдал бы ошибку document is not defined
.
Ошибка указывает, что это результат document.getElementById()
, который является null
, а не document
.
document.getElementById
предполагается высмеивать, как и любую другую функцию:
jest.spyOn(document, 'getElementById').mockReturnValueOnce({ value: '...' });
вы можете использовать [document && document ...], а затем протестировать на updateProdSpan. Ну, он только запустит тест, возможно, вам нужно смоделировать объект документа с помощью jest.mock