У меня есть модуль, который предоставляет некоторые вспомогательные функции для манипулирования 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()
приводит к той же ошибке.
Это какая-то проблема порядка загрузки или что-то еще?