【问题标题】:Istanbul Code Coverage information access from Node从 Node 访问伊斯坦布尔代码覆盖率信息
【发布时间】:2016-11-02 14:42:29
【问题描述】:

上下文

我正在为 Node.js 开发 living-tests。在这种情况下,我对通常如何完成事情并不太感兴趣,而是如何将它们做得更好,因此必然会有所不同。

问题

通过一个 javascript 测试脚本,我希望能够指定一些测试代码要涵盖的内容。所以假设我有一个File 原型,我想测试path 属性。就在执行此属性的代码之前,我想以某种方式指定正在测试的内容。然后在该代码运行后,我想指定它已完成。在这些点之间,当代码被执行时,我不想计算任何覆盖该属性以外的任何其他内容的代码覆盖率。通过这种方式,开发人员可以确保某些内容不仅仅被偶然覆盖,这可以帮助开发人员了解他们拥有和未彻底测试的内容。这是为了部分解决代码覆盖率问题,并不一定意味着某些东西经过了很好的测试。

接近

据我所知,Istanbul 是唯一常用和推荐的 javascript 代码覆盖工具,因此我目前正在强制使用该工具。我知道您必须在启动节点之前启动伊斯坦布尔,这样它才能检测您的代码。但是,我怀疑只要这样做了,在 node 中运行的代码应该能够访问有关到目前为止已涵盖内容的代码覆盖率信息。我很确定如果我能做到这一点,我可以弄清楚如何使用它来完成我想要的。

如何从 javascript 访问代码覆盖率信息?

【问题讨论】:

  • blanket.js 也存在。我以前用过一次,不确定它是否对你有帮助。
  • @clay 谢谢。我将毯子.js 作为最后的手段保存,因为它不是一个维护的项目。
  • 从到目前为止的答案/ cmets 来看,问题本身可以用不同的方式解释。让我解释一下我是否明白:给定一个特定的测试,只考虑有意测试的代码被覆盖。这意味着您在围绕要测试的相关代码的注释中引用您的测试用例。当且仅当测试运行通过此注释特别指定属于此测试的代码时,才考虑将其覆盖。对吗?
  • 似乎如果我只问我想知道什么,人们会抱怨他们不明白我真正想要解决的问题,但是当我提供上下文时,他们抱怨这使得问题可以解释......
  • 我只想访问目前为止所涵盖的内容。希望我能从那里弄清楚其余的。

标签: javascript node.js istanbul


【解决方案1】:

问题是要求一些不能解决问题的东西......

触发代码覆盖运行后,您可以从coverage.json 中访问信息。见https://github.com/gotwarlost/istanbul/blob/master/coverage.json.md

但我认为,您需要的是其他算法。您将其指定为“我想以某种方式指定正在测试的内容。”不幸的是,这太模糊了,无法推荐任何东西。

代码覆盖工具只观察测试期间执行的内容,并将其他所有内容标记为“未测试”。那里没有更多的逻辑。

【讨论】:

  • 正是如此。即使您从测试代码中剥离所有断言,测试覆盖率仍然保持不变。
  • 我喜欢任何时候我把任何关于这里的任何事情都含糊其辞,人们会对此进行磨练。我故意让那部分含糊不清,因为这不是问题的重点。在我知道可以使用哪些资源来查看代码覆盖率之前,我不知道该怎么做。
  • 你说我可以在触发代码覆盖率运行后访问coverage.json中的信息。但是我可以在触发运行之后,在它完成运行之前访问它以查看到目前为止所涵盖的内容吗?
  • @still_dreaming_1 据我了解nyc/istanbuljs 组织是istanbul 的改进版本。我认为计划是在nyc 足够稳定时弃用istanbul
  • @RyanZim 我在这方面找到的信息似乎证实了你所说的。我想你是对的。所以基本上看起来这个答案中链接的伊斯坦布尔目前仍然是“官方”的,但它会在某个时候被弃用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-02
  • 1970-01-01
  • 2015-08-26
  • 2019-04-28
  • 2015-07-29
  • 2015-09-10
  • 2014-05-15
相关资源
最近更新 更多