Как избежать того, что 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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