Как создать объект document в typescript (или js) без использования браузера?
Я пишу тесты для своего проекта на typescript. Использую framework "Testyts". Конструктор одного из моих классов принимает на вход экземпляр интерфейса HTMLElement и производит с ним всевозможные манипуляции. Это будет работать в браузере, потому что я могу написать:
document.createElement('div');
и передавать его. Однако объект document существует только в браузере. А мне нужно написать тесты; они, кажется, браузер использовать не могут.
Вопрос: как я могу эмулировать объект document, или создать экземпляр HTMLElement, или распарсить разметку, чтобы typescript ее подцепил?
Ответы (1 шт):
Нашел библиотеку, которая эмулирует поведение DOM без самого браузерного движка: JSDOM. Чтобы совместить ее с typescript нужно использовать вторую библиотеку с типами: @types/jsdom.
После установки, в файл с тестом можно написать код, который представлен ниже: импортируем сам JSDOM, потом создаем функцию, которая возвратит пустой объект типа Document, и работаем с ним, как с обычным объектом document из браузера.
import { JSDOM } from 'jsdom';
const getEmptyDocument = (): Document => {
const dom = new JSDOM("<!DOCTYPE html><html><head></head><body></body></html>");
return dom.window.document;
}
Ссылки на npm: