Покрытие кода при взаимодействии с кукловодом + Стамбул
У меня есть приложение, созданное с помощью create-react-app
и некоторые тесты пользовательского интерфейса, написанные на Jest + Стамбул.
Я хочу получить покрытие кода этих тестов пользовательского интерфейса. Мне нравится продолжать использовать jest, так как я уже использую его для юнит-тестов.
Я бы не хотел выкидывать create-react-app
если это вообще возможно. Но я открыт для этого, если нет другого выбора.
Что я пробовал до сих пор:
в package.json
"scripts": {
"uitest": "react-scripts test --env=jsdom --verbose --testMatch='**/*.ui-test.{js}'",
}
если я запускаю npm run uitest -- --coverage
^ Я думаю, что в приведенном выше сценарии он только захватывает тесты, а не само приложение.
Как это исправить?
Другие неудачные попытки:
1) Как покрыть файлы React jsx в Стамбуле? - Не применяйте, так как я использую приложение create-react-app
2) https://github.com/facebook/create-react-app/issues/3257 - очевидно, эта функция была предложена, но была отклонена.
3) https://github.com/istanbuljs/puppeteer-to-istanbul/issues/18 - есть библиотека, которая называется puppeteer-to-istanbul, но она не поддерживает исходные карты. (См. Ссылку для выпуска)
4) Я также посмотрел книгу Node.js "Веб-разработка - четвертое издание о safaribooks" - я нашел полезное руководство для Puppeteer, но, похоже, оно не охватывает покрытие кода.
5) Книга Практическая непрерывная интеграция и доставка на Safaribooks - есть раздел о Puppeteer + Jest тестирование, ничего не говорит о покрытии кода.
6) Я попробовал " puppeteer-to-istanbul
→ Мы можем рассчитать покрытие кода для пакета таким образом, он не поддерживает карты-источники.
7) Попытка Enselic, но не смогла заставить его работать. Кажется, что происходит сбой при использовании метода push
внутри пользовательской предустановки при попытке нажать babel-plugin-istanbul
.
Ответы
Ответ 1
Похоже, вы пропустили опцию collectCoverageFrom в вашем файле package.json
.
Попробуйте вставить в ваш package.json
что-то вроде:
"jest": {
...
"collectCoverageFrom": [
"src/**/*.{js,jsx}",
"!**/setupTests.js",
"!**/**/*.test.js"
],
Также неплохо пропустить покрытие для тестовых файлов, так как это портит общее покрытие. Для этого случая используйте !
в массиве collectCoverageFrom
как показано в примере;)