2017-05-22 24 views
2

我的组是建筑用下面的前端栈的应用程序:NYC覆盖显示不正确的行号

VueJS, 的WebPack 2.2, AvaJS(单元测试), NYC(伊斯坦布尔),用于测试覆盖

我们从vue-cli开始为我们的项目创建一个Webpack模板。大部分情况都很顺利。我们能够单独使用Ava进行单元测试.vue使用vue-node的组件文件但是,通过nyc生成的测试覆盖率报告存在问题。下面是定义了我们的的package.json文件有关纽约和AVA部分的片段:

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

所有的测试顺利通过。纽约市的报告显示以下内容: nyc generated report

的问题是该行#S下揭秘线不存在上市。 .vue文件只有402行,所以我无法弄清楚nyc报告中这些行号是从哪里来的。

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

+0

你有[源地图(https://github.com/avajs/AVA#代码-C超龄)设置? –

+0

感谢您的回复。是的,我看到了,但不知道该怎么做。我之前也没有意识到这是必要的我猜。这只是一个设置sourceMaps的问题:在package.json中的nyc配置文件中是否为true?因为我确实尝试过,没有运气。 – user2360062

+0

我所知的所有信息我在那里阅读:确保您测试的代码包含内联源地图或引用源地图文件。如果你使用'babel-register',你可以在你的Babel配置中将'sourceMaps'选项设置为'inline'。 –

回答

1

我有同样的问题,你需要安装babel-plugin-istanbul,用伊斯坦布尔覆盖你的代码。这个插件负责为你的代码获取正确的sourceMap。所以你需要从nyc中禁用instrument和sourceMap。

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

添加上.babelrc这个插件只为您的ENV测试。

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

然后从nyc中禁用instrument和sourceMap。 babel-plugin-istanbul会照顾它。并且您的“要求”与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