Покрытие кода при взаимодействии с кукловодом + Стамбул

У меня есть приложение, созданное с помощью 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

attempt 1 failure

^ Я думаю, что в приведенном выше сценарии он только захватывает тесты, а не само приложение.

Как это исправить?


Другие неудачные попытки:

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 как показано в примере;)