【问题标题】:istanbul with mocha , nodejs always gives the same coverage伊斯坦布尔与 mocha ,nodejs 总是提供相同的覆盖率
【发布时间】:2016-03-04 05:47:47
【问题描述】:

我已经设置了 istanbul 来检查我在 node.js 中的 api 的代码覆盖率。如果测试覆盖率错误,如果我明白了整个想法,我会感到困惑。我有一个目录结构 -应用程序包含 -api -控制器 -楷模 -测试 -api_test.js

running istanbul cover _mocha 运行 api_test.js 中的所有测试用例并将覆盖率返回为 报表:46.55% (27/58) 分行:0% ( 0/18 ) 功能 : 0% ( 0/13 ) 行数:48.21% (27/56)

然后我删除了一堆测试用例,重新运行 istanbul 仍然覆盖率统计数据是相同的。 根据我对该工具的理解,它应该根据我的测试用例导致执行的所有代码行为我提供统计数据,因此从技术上讲,当我运行较少数量的测试时,它应该会减少测试覆盖率。 此外,我的报告 html 仅包含某些模型的覆盖率统计信息(甚至不是全部)所以这增加了我是否正确配置了测试套件和 istanbul 的混乱。任何帮助将不胜感激,因为我对节点很陌生。

【问题讨论】:

  • 您在本地或全球安装了 mocha 和 istanbul 吗?
  • 如果你对一个空的测试套件运行 instanbul 会发生什么,它是否显示 0% 的覆盖率?我不认为删除几个测试仍然会导致相同的覆盖率是不合理的。如果您选择一个特定的模块,并删除所有引用该模块的测试(需要确保该模块没有被其他有测试的模块导入/使用),测试覆盖率结果会下降吗?
  • 0 次通过 (1ms) @dm03514 我仍然得到相同的覆盖率统计数据。

标签: node.js mocha.js istanbul


【解决方案1】:

istanbul 用于源代码文件的代码覆盖。 mocha 保存测试用例。您可以有一个占源代码 100% 的测试用例,而伊斯坦布尔会报告 100%。您可以添加更多测试用例(针对不同的路径、用例等),但 istanbul 会报告相同的结果,因为第一个测试用例是 100%。

我认为您已正确设置所有内容。在您的问题中,仅通过运行测试就可以达到一定的覆盖范围,而这些测试又会加载您的源文件。拥有一个或 100 个测试用例,源文件在加载时仍会被处理。当您看到像 Branches : 0% ( 0/18 ) Functions : 0% ( 0/13 ) 这样的东西时,您知道您没有进行太多测试,但仍然有一些线路覆盖。

当您的测试用例运行更多被测源代码时,伊斯坦布尔将改变其结果。

【讨论】:

    【解决方案2】:

    @clay 谢谢,这有帮助。所以我现在发现的是,在我的情况下,我有 mocha 测试,它只是调用 api 端点并获得结果。因此,在运行测试用例时几乎不会加载源文件,因此代码覆盖率几乎不会改变。我通过在我的测试用例之上包含我需要涵盖的文件解决了这个问题。这只是一个虚拟要求,仅用于加载我的源文件以进行覆盖。我可以要求文件或文件夹,所有这些源文件都将被监视,并在执行时添加到报告中。 我希望这对面临类似困惑的其他人有所帮助。

    【讨论】:

      猜你喜欢
      • 2015-08-26
      • 1970-01-01
      • 1970-01-01
      • 2019-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-02
      相关资源
      最近更新 更多