Насмешка над модулями ES при запуске сервера разработки Vite

#unit-testing #mocking #stubbing #vite #es6-modules

Вопрос:

Мне нужно выяснить, как я могу поручить Vite заменить ссылки на локальные/относительные модули во время выполнения. Примером использования здесь является тестовый запуск mocha-vite-puppeteer, который использует Vite для запуска тестов, но затем, конечно, заглушение модулей не работает при использовании механизмов узлов, таких как proxyquire или rewire.

Поэтому мне в основном нужно либо ознакомиться с некоторым существующим программным обеспечением, которое может помочь мне в этом, либо дать несколько советов о том, как создать свой собственный «vite-proxyquire» с помощью import.meta и друзьями.

Обычное использование для временного отключения ./my-ugly-module может заключаться в том, что вы хотите избежать загрузки некоторой зависимой части, которая имеет некоторые уродливые переходные зависимости, которые засасывают все дерево приложений в ваш небольшой тест, или вы хотите избежать загрузки зависимой части, которая имеет некоторые уродливые побочные эффекты для глобального состояния.

Существующие решения

Современный веб, освежающий подход «без пакетов и рамок» к веб — разработке с использованием стандартных инструментов, немного расскажет о проблеме, связанной с тем, как неизменяемая природа модулей ES предотвращает обычные шаблоны заглушки. Они представляют решение в виде карт импорта, которые по сути были бы похожи на конфигурацию псевдонима в Vite (на самом деле свертка), отображающую путь к модулю в какой-либо другой файл. Проблема со статическим решением, подобным этому, заключается в том, что оно заменит весь импорт данного модуля, а не только для одного теста. В современном Интернете есть решение этой проблемы, где они решили использовать пользовательскую html-страницу для каждого такого теста. Чтобы сделать это менее сложным при запуске, у них есть собственный тестовый запуск, который обрабатывает все эти дополнительные тестовые html-файлы. Выполнение чего-то подобного может быть одним из способов исправить это, но для этого потребуется разработать довольно много кода промежуточного программного обеспечения/плагина, ИМХО, чтобы он работал прозрачно с Vite. Без каких-либо дополнительных инструментов это также привело бы к появлению большого количества дополнительных файлов, что кажется небольшим недостатком по сравнению с сегодняшним императивным издевательством над зависимостями с помощью proxyquire, Jest или Test Double из тестовых файлов.