@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)']