У меня есть модуль, который предоставляет некоторые удобные функции для манипулирования DOM, которые я пытаюсь протестировать с помощью Jest и jsdom, но, похоже, я делаю что-то неправильно при его создании.
Прочитав другие вопросы и ответы (например, этот), я понял, что среда тестирования Jest автоматически настроена на использование jsdom и что вам нужно заменить global.document
, но он не работает, как у меня сейчас.
Вот самый маленький тестовый пример для воспроизведения проблемы:
// domUtils.js
function el(id) {
return document.getElementById(id);
}
а также
// domUtils.test.js
import { JSDOM } from "jsdom";
import * as domUtils from "../src/domUtils";
describe("DOM operations", () => {
// Workaround for jsdom issue 2304 - needed for later localStorage tests
const url = "http://localhost";
const documentHTML = '<!DOCTYPE html><div id="lorem" class="test">Lorem ipsum</div>';
global.document = new JSDOM(documentHTML, { url });
test("Get an element from the DOM", () => {
const loremDiv = domUtils.el("lorem");
expect(loremDiv.constructor.name).toEqual("HTMLDivElement");
});
}
Это приводит к TypeError: Cannot read property 'constructor' of null
. Замена вызова domUtils.el()
на document.getElementById()
приводит к той же ошибке.
Это какая-то проблема с порядком загрузки или что-то еще?