Как создать объект document в typescript (или js) без использования браузера?

Я пишу тесты для своего проекта на typescript. Использую framework "Testyts". Конструктор одного из моих классов принимает на вход экземпляр интерфейса HTMLElement и производит с ним всевозможные манипуляции. Это будет работать в браузере, потому что я могу написать:

document.createElement('div');

и передавать его. Однако объект document существует только в браузере. А мне нужно написать тесты; они, кажется, браузер использовать не могут.

Вопрос: как я могу эмулировать объект document, или создать экземпляр HTMLElement, или распарсить разметку, чтобы typescript ее подцепил?


Ответы (1 шт):

Автор решения: MrShnaider

Нашел библиотеку, которая эмулирует поведение 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:

→ Ссылка