nyc coverage显示错误的行号

时间:2017-05-22 19:13:19

标签: unit-testing vue.js istanbul ava

我的小组正在使用以下前端堆栈构建应用程序:

  • VueJS
  • Webpack 2.2
  • AvaJS(用于单元测试)
  • nyc(伊斯坦布尔)进行测试覆盖

我们从vue-cli开始为我们的项目创建一个Webpack模板。在大多数情况下,一切都很顺利。我们可以使用Ava使用 vue-node 对单独的 .vue 组件文件进行单元测试。但是通过 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 generated report

问题是 Uncovered Lines 下列出的行#s不存在。 .vue 文件只有402行,所以我无法确定nyc报告中这些行#的来源。

任何帮助将不胜感激,并提前感谢您。

1 个答案:

答案 0 :(得分:2)

我遇到了同样的问题,您需要安装babel-plugin-istanbul,以便在伊斯坦布尔覆盖范围内检测您的代码。此插件负责为您的代码获取正确的sourceMap。因此,您需要从sourceMap停用工具和nyc

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

.babelrc文件(通常位于项目的根文件夹中)中,添加以下内容,以便它仅供您的测试环境使用:

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

然后从sourceMap停用工具和nycbabel-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