Как избежать того, что target.hasPointerCapture не является функцией при тестировании компонентов пользовательского интеJavascript

Форум по Javascript
Anonymous
Как избежать того, что target.hasPointerCapture не является функцией при тестировании компонентов пользовательского инте

Сообщение Anonymous »

Я тестирую компоненты, созданные с помощью shadcn/ui, внутри которого используется пользовательский интерфейс Radix.
При запуске тестов взаимодействия пользовательского интерфейса с использованием Vitest и @testing-library/user-event я постоянно получаю следующую ошибку:

Код: Выделить всё

target.hasPointerCapture is not a function
Вот что я пробовал:
  • Изменил тестовую среду на Happy-dom в vitest.config.mts.
  • Инициализировал userEvent с помощью pointerEventsCheck: 0:

Код: Выделить всё

const user = userEvent.setup({ pointerEventsCheck: 0 });
Ошибка все еще возникает.
Единственное решение, которое (я нашел), похоже, работает, — это заполнение отсутствующих DOM API:

Код: Выделить всё

beforeAll(() => {
if (!Element.prototype.hasPointerCapture) {
Element.prototype.hasPointerCapture = vi.fn().mockReturnValue(false);
}
if (!Element.prototype.setPointerCapture) {
Element.prototype.setPointerCapture = vi.fn();
}
if (!Element.prototype.releasePointerCapture) {
Element.prototype.releasePointerCapture = vi.fn();
}
if (!Element.prototype.scrollIntoView) {
Element.prototype.scrollIntoView = vi.fn();
}
});
Это централизует недостающие API-интерфейсы DOM, поэтому мне не нужно повторять их в каждом тестовом файле.
Вопрос:
Существует ли какой-либо другой подход (кроме добавления этих ручных полифилов), чтобы избежать ошибок, связанных с hasPointerCapture, при тестировании компонентов Radix UI/shadcn с помощью Vitest и userEvent?

Подробнее здесь: https://stackoverflow.com/questions/797 ... radix-ui-s

Вернуться в «Javascript»