Получить покрытие кода от Cypress с помощью плагинов babel, nyc и istanbul?

Для проекта React / Redux я использую Cypress для тестирования пользовательского интерфейса. Мне нужно получить покрытие кода из этих тестов, чтобы детали были в Sonar (но это уже другая история).

Итак, я начал читать документы Cypress: https://docs.cypress.io/guides/tooling/code-coverage.html

Я выполнил инструкции и нашел разные плагины, но ничего не работает. После запуска тестов Cypress у меня нет результатов покрытия, и когда я пытаюсь запустить сервер с инструментальным кодом при транспиляции и пытаюсь получить window.__coverage__ это undefined.

Итак, вот моя конфигурация.

Мои devDep и NYC conf в package.json:

"devDependencies": {
    "@cypress/code-coverage": "^1.8.0",
    "babel-cli": "^6.26.0",
    "babel-plugin-istanbul": "^5.2.0",
    "babel-plugin-react-intl": "^2.4.0",
    "babel-plugin-transform-class-properties": "^6.24.1",
    "babel-preset-react-app": "^3.1.2",
    "cross-env": "^5.2.0",
    "cypress": "3.1.0",
    "istanbul-lib-coverage": "^2.0.5",
    "jest-junit-reporter": "^1.1.0",
    "junit": "^1.4.9",
    "nyc": "^14.1.1",
    "react-test-renderer": "^16.3.0"
     [...]
},
"scripts": {
    "start": "react-scripts start",
    [...]
    "test:unit:local": "react-scripts test --env=jsdom .*_test.js",
    "test:unit": "npm run test:unit:local -- --ci --coverage --testResultsProcessor ./node_modules/jest-junit-reporter",
    "test:integ:local": "cypress run --reporter junit",
    "test:integ": "start-server-and-test start http://localhost:3000 test:integ:local",
    "test": "cross-env NODE_ENV=test && npm run test:unit && npm run test:integ"
},
"nyc": {
    "sourceMap": false,
    "instrument": false
}

Мой .babelrc файл:

{
"presets": ["@babel/preset-react"],
"plugins": [
    [ "react-intl", {
        "messagesDir": "./src/messages",
        "extractSourceLocation": true
    }],
    "transform-class-properties",
    "istanbul"
],
"env": {
    "test": {
      "plugins": [ "transform-class-properties", "istanbul" ]
    }
  }
}

Мой \cypress\support\index.js содержит эту строку:

import '@cypress/code-coverage/support'

А вот и мой \cypress\plugins\index.js:

module.exports = (on, config) => {
    on('task', require('@cypress/code-coverage/task'))
    on('file:preprocessor', require('@cypress/code-coverage/use-babelrc'))
    return config
}

Поэтому я ожидаю получить результат, который вы можете увидеть в документации Cypress. Веб-сайт создан, но файлы, содержащие отчеты о покрытии, пусты.

И я не понимаю, что не так в моей конфигурации.


person Corentin Daillie    schedule 07.08.2019    source источник
comment
Эй, Корентин, ты используешь сценарии реакции без отклонений? В этом случае ваш файл .babelrc не будет использоваться. К счастью, вы можете использовать github.com/cypress-io/instrument-cra для настройки своего приложение даже для react-scripts start случая   -  person gleb bahmutov    schedule 08.08.2019
comment
Привет, Глеб! Я думаю, что это не было сделано, но это странно, потому что файл .babelrc, кажется, используется, когда я извлекаю сообщения из JSX для React-Intl. Но спасибо за идею инструмента с CRA. :)   -  person Corentin Daillie    schedule 12.08.2019
comment
@CorentinDaillie Вы нашли какое-нибудь решение? Я столкнулся с той же проблемой. Отчет о покрытии пуст. github.com/cypress-io/instrument-cra также дает ошибку.   -  person LAXIT KUMAR    schedule 27.11.2019
comment
@LAXITKUMAR Не то же самое, что и вы, но я все еще ищу решение для этого. Отчет о покрытии всегда пуст, и под window.__coverage__ ничего не обнаружено.   -  person Corentin Daillie    schedule 29.11.2019


Ответы (1)


Я тоже столкнулся с этой проблемой. Не удалось получить покрытие кода. Понижение версии nyc с 14.x.x до 13.x.x устранило проблему, как упоминалось здесь .

person RS1879    schedule 07.12.2019