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

  • VueJS
  • Webpack 2.2
  • AvaJS(用于单元测试)
  • nyc( Istanbul 尔),测试覆盖率

  • 我们从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报告显示以下内容:
    unit-testing - 纽约市覆盖显示不正确的行号-LMLPHP

    问题在于,“未发现的行”下列出的行号不存在。 .vue文件只有402行,因此我无法确定nyc报告中这些行的来源。

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

    最佳答案

    我遇到了同样的问题,您需要安装babel-plugin-istanbul来使用Istanbul覆盖范围检查代码。该插件负责为您的代码获取正确的sourceMap。因此,您需要从sourceMap禁用instrument和nyc

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

    .babelrc文件(通常在项目的根文件夹中找到)中,添加以下内容,使其仅在您的测试环境中使用:
    {
      "env": {
        "test": {
          "plugins": [ "istanbul" ]
        }
      }
    }
    

    然后从sourceMap禁用instrument和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
    

    资料来源:
  • https://www.npmjs.com/package/babel-plugin-istanbul
  • https://github.com/istanbuljs/nyc#use-with-babel-plugin-istanbul-for-babel-support
  • 关于unit-testing - 纽约市覆盖显示不正确的行号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44120502/

    10-11 02:21