покрытие NYC показывает неправильные номера строк

Моя группа создает приложение со следующим стеком внешнего интерфейса:

  • VueJS
  • Webpack 2.2
  • AvaJS (для модульного тестирования)
  • nyc (Стамбул) для тестового покрытия

Мы начали с vue-cli, чтобы создать шаблон Webpack для нашего проекта. По большей части все прошло гладко. Мы можем использовать Ava для модульного тестирования отдельных файлов компонентов .vue с помощью vue-node. Однако есть проблема с отчетом о тестовом покрытии, созданным с помощью nyc . Ниже приведен фрагмент нашего файла package.json с определенными соответствующими разделами nyc и ava:

"nyc": {
    "exclude": [
        "build",
        "config",
        "static",
        "tests"
    ],
    "extension": [
        ".js",
        ".vue"
    ]
},
"ava": {
    "require": [
        "./tests/unit/helpers/setup.js",
        "ignore-styles"
    ]
},

Все тесты проходят успешно. Отчет nyc показывает следующее:  Отчет, созданный NYC

Проблема в том, что строки №, перечисленные в разделе Непокрытые строки, не существуют. Файл .vue состоит всего из 402 строк, поэтому я не могу понять, откуда берутся эти # строки в отчете NYC.

Любая помощь будет оценена и благодарим вас заранее.


person user2360062    schedule 22.05.2017    source источник
comment
У вас настроены исходные карты?   -  person Roy J    schedule 22.05.2017
comment
Спасибо за ваш ответ. Да, я видел это, но не знаю, как это сделать. Я тоже раньше не понимал, что это было необходимо, наверное. Это просто вопрос установки sourceMaps: true в конфигурации nyc в package.json? Потому что я пробовал это, но безуспешно.   -  person user2360062    schedule 22.05.2017
comment
Все, что я знаю об этом, я читаю прямо здесь: убедитесь, что код, который вы тестируете, включает встроенную исходную карту или ссылается на файл исходной карты. Если вы используете babel-register, вы можете установить для параметра sourceMaps в конфигурации Babel значение inline.   -  person Roy J    schedule 22.05.2017
comment
Понятно. Да я все еще в тупике. Невозможно понять, как интегрировать опцию sourcemaps в мою текущую конфигурацию. Пока ничего не работало.   -  person user2360062    schedule 22.05.2017


Ответы (1)


У меня была такая же проблема, вам нужно установить babel-plugin-istanbul, который контролирует ваш код с охватом Стамбула. Этот плагин отвечает за подбор sourceMap правильного кода для вашего кода. Значит нужно отключить инструмент и sourceMap из nyc.

npm install --save-dev babel-plugin-istanbul

В файл .babelrc (обычно находящийся в корневой папке вашего проекта) добавьте следующее, чтобы он использовался только вашей тестовой средой:

{
  "env": {
    "test": {
      "plugins": [ "istanbul" ]
    }
  }
}

Затем отключите инструмент и sourceMap из nyc. babel-plugin-istanbul позаботится об этом. И замените свой "require": "nyc" на "require": "babel-register".

"nyc": {
  "exclude": [
    "build",
    "config",
    "static",
    "tests"
  ],
  "extension": [
    ".js",
    ".vue"
  ]
  "require": [
    "./tests/unit/helpers/setup.js",
    "ignore-styles",
    "babel-register"
  ],
  "sourceMap": false,
  "instrument": false
},

Теперь вы сможете получить покрытие с nyc.

NODE_ENV=test nyc ava

Источники:

  1. https://www.npmjs.com/package/babel-plugin-istanbul
  2. https://github.com/istanbuljs/nyc#use-with-babel-plugin-istanbul-for-babel-support
person Tobino    schedule 30.07.2017
comment
Превосходно. Моя команда nyc ... работала нормально, за исключением номеров строк, которые были полностью отключены. Добавление плагина Babel для Стамбула и обеспечение того, чтобы "sourceMap" и "instrument" были выключены в nyc, сделали свое дело. - person Alexis Wilke; 28.01.2019