3.2Kпросмотров
77.4%от подписчиков
6 февраля 2025 г.
Score: 3.5K
Почему я не буду использовать JSDOM Артем Захарченко предлагает перестать пользоваться библиотекой JSDOM при написании тестов компонентов. JSDOM эмулирует браузер в Node.js, но со своими особенностями. Например, событие Event использует класс dom.window.Event из JSDOM. Это событие не является браузерным или даже Node.js событием. Поэтому произойдет ошибка, если это событие будет обработано где-то еще, кроме JSDOM, например: import { JSDOM } from 'jsdom' const dom = new JSDOM()
const clickEvent = new dom.window.Event('click')
console.log(clickEvent instanceof globalThis.Event)
// false
const target = new EventTarget()
target.dispatchEvent(clickEvent) // Выкинет исключение Для реализации API браузера JSDOM использует полифиллы, даже для таких Node.js API как fetch, Event, MessageChannel. Однако JSDOM не полностью поддерживает весь функционал браузера, например не поддерживает structuredClone. По мнению автора статьи, для прогона тестов лучше использовать Vitest Browser Mode и Playwright, которые запускают тесты в настоящем браузере. https://www.epicweb.dev/why-i-won-t-use-jsdom