Отказ от ответственности: в этой статье описывается моя конкретная миграция. Это ни в коем случае не универсальное руководство по миграции.
Зачем тестировать и почему Jest?
Jest — это тестовая платформа, созданная Facebook, которая гордится тестированием Javascript с нулевой конфигурацией. Изначально это то, что делает Jest привлекательным. Приложения с достаточным тестовым покрытием дают разработчикам больше уверенности, когда приходит время выпускать изменения. Имея это в виду, упрощение разработки тестов увеличивает шансы того, что разработчики, работающие над вашим приложением, напишут осмысленные утверждения.
Причина, по которой я решил перейти с Karma на Jest, в основном заключается в тестировании моментальных снимков. Снимки позволяют протестировать обновленные компоненты React в сравнении с предыдущей версией этого компонента. Если тесты пройдены, это означает, что ваши обновления отображают компонент так же, как он отображался при создании моментального снимка. И наоборот, если внесенные вами изменения предназначались для изменения способа визуализации компонента, вы можете обновить снимок, чтобы отразить это; все будущие тесты будут сравниваться с новым снимком. (Снимок — единственный источник правды. Множественные снимки не сохраняются. Только самые последние.)
Более подробную информацию можно найти здесь: https://facebook.github.io/jest/
Установка
Чтобы установить Jest с Yarn, выполните следующую команду:
yarn add --dev jest
Чтобы установить с помощью NPM, запустите это:
npm install --save-dev jest
Конкретное переносимое приложение использует Babel для переноса кода ES6/React, поэтому Также необходимы Babel-Jest и несколько плагинов для трансформации. Требуемые преобразования: transform-decorators-legacy, transform-es2015-modules-commonjs и transform-class -свойства.
Для их установки используйте:
yarn add --dev babel-env babel-jest babel-plugin-transform-decorators-legacy babel-plugin-transform-class-properties babel-plugin-transform-es2015-modules-commonjs
Вавилон
По умолчанию Jest будет использовать настройки в вашем .babelrc, но будут использовать только настройки, определенные в «тестовая» среда (Jest автоматически устанавливает NODE_ENV в «тестовую»). Этот раздел был добавлен, чтобы порадовать Jest:
Теперь нам нужно указать Jest использовать Babel-Jest для преобразования наших файлов «.js»:
// package.json "transform": { "^.+\\.js$": "babel-jest" },
Убийство чая утверждений
Чтобы облегчить перенос существующего теста на платформу Jest, Jest-CodeModsпредоставляет простую команду линейный интерфейс, помогающий преобразовать ваши файлы **/*.spec.js (или test.js) в правильный формат.
Примечание. Команда `jest-codemods` ожидает, что вы уже зафиксировали все незавершенные изменения git перед запуском преобразований.
Следуйте инструкциям на Jest-CodeMods Github, чтобы начать.
Особый случай: псевдоним Webpack
До этой миграции параметры конфигурации приложения хранились в файле конфигурации YAML в корневой папке. Webpack проанализировал этот файл при сборке и загрузил его как внешний. Jest было трудно понять это (без дополнительной настройки), поэтому я решил вместо этого загрузить конфигурацию как Псевдоним Webpack. Файлы были перемещены из файла YAML в файл JS с помощью экспорта CommonJS.
// config.dev.js module.exports = { // app settings go here }
Это было добавлено в конфигурацию Webpack (символ $ указывает, что это точный путь):
// webpack.dev.config.js resolve: { alias: { config$: path.resolve(__dirname, 'config/config.dev.js')} }
А вот как был получен доступ к конфигу в приложении:
// test.js import Config from 'config';
Наконец, мы должны включить настройки в наш .babelrc, которые сообщат Jest, как разрешить наш новый псевдоним:
Установите этот пакет:
yarn add -D babel-plugin-module-resolver
Потом:
// .babelrc ["module-resolver",{ "root": ["./app"], "alias": {"appConfig": "./config/appConfig.test.js"} }]
Заканчивать
Последним шагом был просто запуск тестов. Все тесты в этом приложении находились в папке src, поэтому я добавил тестовый скрипт в package.json:
"test": "jest src/**/*.spec.js"
Большая часть рутинной работы по преобразованию тестов была выполнена с помощью Jest-CodeMods, но по-прежнему требовалось немного ручной работы для удаления Sinon в пользу функций Jest. Как только вы пройдете все тесты, вы готовы к работе. Удачного тестирования!