@vue/cli-plugin-unit-jest
Плагин unit-jest для vue-cli
Внедряемые команды
vue-cli-service test:unitЗапуск модульных тестов с помощью Jest. По умолчанию значением
testMatchбудет<rootDir>/(tests/unit/**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx))что совпадает с:- Любыми файлами в
tests/unitкоторые заканчиваются на.spec.(js|jsx|ts|tsx); - Любыми js(x)/ts(x) файлами внутри каталогов
__tests__.
Использование:
vue-cli-service test:unit [options] <regexForTestFiles>Также поддерживаются все опции Jest CLI.
- Любыми файлами в
Отладка тестов
Обратите внимание, что запуск jest напрямую будет заканчиваться ошибкой, потому что для пресета Babel требуются подсказки как заставить код работать в Node.js. Поэтому необходимо запускать тесты командой vue-cli-service test:unit.
Если необходимо отладить тесты с помощью инспектора Node, можно запустить следующее:
# macOS или linux
node --inspect-brk ./node_modules/.bin/vue-cli-service test:unit
# Windows
node --inspect-brk ./node_modules/@vue/cli-service/bin/vue-cli-service.js test:unit
Конфигурация
Jest можно настроить через jest.config.js в корне проекта, или через поле jest в файле package.json.
Установка в уже созданный проект
vue add unit-jest
Обработка зависимостей из /node_modules
По умолчанию jest не обрабатывает ничего из /node_modules.
Поскольку jest работает на Node, то нет необходимости транспилировать всё, где используются современные возможности ECMAScript, так как Node >=8 уже их поддерживает, поэтому это разумное решение по умолчанию. По этой же причине также cli-plugin-jest не поддерживает опцию transpileDependencies в файле vue.config.js.
Однако, есть (по крайней мере) три случая, когда необходимо транспилировать код из /node_modules в jest:
- Использование выражений ES6
import/export, которые нужно скомпилировать в формат commonjsmodule.exports - Однофайловые компоненты (
.vueфайлы) которые запускаются черезvue-jest - Код Typescript
Для этого необходимо добавить исключение в опции jest transformIgnorePatterns. Значение по умолчанию такое:
transformIgnorePatterns: ['/node_modules/']
Необходимо добавить исключения из этого шаблона с негативным lookahead в RegExp:
transformIgnorePatterns: ['/node_modules/(?!name-of-lib-o-transform)']
Для исключения нескольких библиотек:
transformIgnorePatterns: ['/node_modules/(?!lib-to-transform|other-lib)']