是否可以显示伊斯坦布尔的实际代码覆盖率,忽略"忽略">注释?
例如,不要忽略下一个:
/* istanbul ignore next */
我们的覆盖率报告100%覆盖率,但在代码中忽略了这一点。
我意识到这不是你想听到的答案,尽管对我来说,这是唯一合乎逻辑的答案:从你的代码库中删除这些行。
让我解释一下原因:这些行的唯一功能是确保以下行/语句不包含在覆盖范围结果中。因此,如果您不希望它被忽略,请删除行。
如果出于某种原因,您真的想保留代码库中的行。您可以考虑使用基于CI的解决方案。创建一个首先删除所有要删除的行的作业。类似这样的东西:
for file in *.js
do
sed '/istanbul ignore/d' "$file" > "$file".new_file.js
mv "$file".new_file.js "$file".js
done
然后像往常一样计算代码覆盖率
尽管如此,由于这将更改所有文件,因此在本地运行并不理想,因为您可能需要在词后gitrevert所有更改。因此,我建议CI,因为在那里你可以简单地结束工作,忽略你所做的更改。
正如您在评论中所建议的那样,添加lint规则以防止使用/* istanbul ignore ... */
可能是最好的解决方案。
然而,由于Istanbul是开源JavaScript软件,您也可以很容易地对其进行修改,使其忽略/* istanbul ignore ... */
语句。这里有一个快速而肮脏的特别解决方案(正确的解决方案是派生项目、修改源代码、构建和安装它(:
- 在项目的
node_modules
文件夹中找到伊斯坦布尔依赖项 - 在已识别的文件夹中搜索
/^s*istanbuls+ignores+
,这是正则表达式模式的一部分,Istanbul使用它来正确识别忽略注释 - 修改找到的源文件中的模式,例如将
istanbul
和/或ignore
更改为其他术语,这样项目源代码中现有的/* istanbul ignore ... */
注释就不再匹配(或者取消整个机制,但这可能更困难,风险更大(
我不推荐这种方法。我只是想表明,这是可以做到的。根据您的具体设置,它可能很容易实现,也可能很难实现。我刚刚在VS Code的ES 2015项目中尝试了一下,效果很好。