为啥我的覆盖率报告显示红色覆盖线?

Posted

技术标签:

【中文标题】为啥我的覆盖率报告显示红色覆盖线?【英文标题】:Why does my coverage report show covered lines in red?为什么我的覆盖率报告显示红色覆盖线? 【发布时间】:2016-06-18 19:38:41 【问题描述】:

我可以使用 Karma、Tape 和 Istanbul(特别是 babel-istanbul)来获得我的 ES6 代码库的正确覆盖率报告,但 html 报告显示一些红色的覆盖行,即使它显示在它们在测试套件中被覆盖了几次的余量:

特别是,第 13 行显示了 4 倍的覆盖率,这反映了我刚刚编写的测试(它调用了四次 concat())。

那条线为什么是红色的?

【问题讨论】:

你好,我也有同样的问题,你找到原因了吗? 不幸的是,我真的没有。因为事情太复杂了,结果不确定,我当时放弃了自动覆盖测试。现在情况可能会好转。 【参考方案1】:

您好,我认为这是因为在您的 mocha 文件中您需要来自 lib 而不是 src

您应该需要 src 代码而不是编译后的代码。 并确保在你的 package.json 脚本中有类似


"compile": "babel src/ -d lib/ --presets es2015 --source-map both",
 "test": "npm run compile && mocha",
"test-cov": "npm run compile && istanbul cover _mocha -- --opts ./test/mocha.opts"

src 是你的源代码 lib 是编译后的代码 --source-map both 可以帮助伊斯坦布尔跟踪您的源代码的覆盖率

在 mocha.opts 中

--require babel-polyfill
--compilers js:babel-register

【讨论】:

我不确定你的意思 - 我没有使用 Mocha,而且我正在覆盖我的 ES6 代码中的正确行(通过嵌入在编译文件中的源映射)。我的问题与为什么线是红色的,但仍然(正确)报告为被覆盖有关。 您需要在 es6 代码和编译代码中嵌入源映射。如果你不使用 mocha,你使用哪个测试框架,你能指定吗?您在测试框架中需要哪个文件? es6代码还是编译代码?尝试在您的测试框架中要求 es6 代码 我的源图是嵌入的;这就是为什么我得到 ES6 代码的覆盖率结果。我最初的问题描述了我的设置:编写测试的磁带,运行测试的业力,以及覆盖范围的 babel-istanbul。 能否请您也出示您的测试文件???它不仅与源图有关,还与您在测试文件中所需的文件有关!【参考方案2】:

我认为正在发生的事情是,这些行正在运行页边空白中列出的次数,但它们是红色的,因为覆盖的某些方面没有受到影响。例如,查看我的屏幕截图,我不确定第 13 行可能是什么,但是将鼠标悬停在红线上会弹出一条消息,解释错过了什么。

【讨论】:

以上是关于为啥我的覆盖率报告显示红色覆盖线?的主要内容,如果未能解决你的问题,请参考以下文章

Codeception颜色报告不起作用

为啥我的覆盖线没有根据极坐标公式(swift,ios)产生我在地图中的期望?

为啥 Karma Coverage 实际显示“未涵盖的声明”?

预览模式下的 SonarQube 线覆盖规则

为啥 PyTest 覆盖率报告中缺少我项目的大部分 Django 文件?

为啥 codecoverage 要我覆盖定义变量?