【问题标题】:What is instrumentation in nyc istanbul?什么是纽约伊斯坦布尔的仪器仪表?
【发布时间】:2020-01-24 06:28:15
【问题描述】:

什么是纽约市使用的仪器?

nyc 的 instrument 命令可用于在单元测试上下文之外检测源文件:

我认为它会在单元测试之外进行覆盖。我试过了

nyc instrument src coverage/instrument

然后运行应用程序并尝试访问端点

npm start

但是当我执行上述操作时,它不会在nyc_output 中生成文件,因此无法报告任何内容。

我必须完成nyc instrument 命令吗?怎么做?

【问题讨论】:

    标签: istanbul nyc


    【解决方案1】:

    nyc instrument 用于检测您的代码。它产生的输出在运行时将收集覆盖数据。这是没用的,除非你真的用这些数据做一些事情......比如报告它或以某种方式使用它。当您运行已检测的文件时,它会将覆盖率数据存储在global.__coverage__ 我相信。然后,您可以使用该数据做您想做的事情。因此,您可以创建一个报告器来运行检测文件,然后查看global.__coverage__ 以了解覆盖范围。简单地运行检测文件不会产生任何输出

    要查看已检测文件的覆盖范围,您可以在 require 检测文件的位置创建自己的报告器,然后查看 global.__coverage__ 或运行 nyc 命令像正常一样生成覆盖率数据。

    这里有几个例子:

    假设您有一个文件file.js 想要检查其覆盖率并且您已经运行了命令:

    nyc instrument file.js > file_instrumented.js
    

    现在,您将拥有一个名为 file_instrumented.js 的文件,其中包含生成代码覆盖率所需的所有代码。

    如果我使用node file_instumented.js 运行该文件,则不会发生任何事情...除了文件执行与file.js 相同

    但是,如果我使用此代码创建一个名为 coverage.js 的文件:

    require("./file_instrumented.js");
    console.log(global.__coverage__)
    

    然后,我运行node coverage.js,您将能够看到覆盖率数据。然后,您可以输出您想要的任何数据。这是对覆盖数据的较低级别的访问

    如果您想在nyc_output 中生成报告,您需要对检测文件使用nyc 命令。例如,像这样:

    nyc --reporter=text --report-dir=./nyc_output node file_instrumented.js
    

    如果您使file_instrumented.js 文件可执行,这样的命令也可以工作:

    nyc --reporter=text --report-dir=./nyc_output file_instrumented.js
    

    但是,如果我们尝试像这样对原始 file.js 运行相同的命令:

    nyc --reporter=text --report-dir=./nyc_output node file.js
    

    您会看到我们收到的报告显示没有覆盖范围。这是因为file.js 文件没有经过检测,因此没有给nyc 报告者提供任何要报告的数据

    你是正确的,使用nyc instrument 将在单元测试框架之外进行覆盖,正如我在上面演示的那样。这有点令人困惑,因为文档并不像应有的那样清晰。我找不到关于如何覆盖测试框架之外的文件的好例子,所以我通过查看nyc 的源代码以及一些测试框架来弄清楚这一切。

    问题是测试框架会为您检测文件,因此当您使用 Mocha 测试框架运行这样的命令时:

    nyc --reporter=text mocha --ui bdd test.js
    

    发生了什么:
    - nyc 正在执行 mocha...
    - 然后mocha 在幕后为您检测您的代码
    - 然后mocha 正在运行该检测代码
    - 在收集覆盖率数据的同时运行测试
    - 为nyc 提供生成报告所需的global.__coverage__
    - 最后,nyc 使用该数据在您的nyc_output 文件夹中输出报告

    希望这一切都有意义...

    【讨论】:

    • 这解释了我目前遇到的问题。然后我看到带有文档字符串should nyc handle instrumentationnyc 的选项--instrument 并认为这应该有助于获得即时检测,但似乎并非如此。知道那有什么用吗?
    【解决方案2】:

    在 nyc v15.1.0 中,我们可以在没有检测文件的情况下创建报告,只需运行

    nyc --reporter=text --report-dir=./nyc_output node file.js
    

    成功了!!

    但我认为如果我们想要获得运行时间报告,我们仍然需要运行检测文件

    【讨论】:

      猜你喜欢
      • 2017-06-26
      • 2020-08-13
      • 2017-08-03
      • 1970-01-01
      • 2017-03-04
      • 1970-01-01
      • 2016-04-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多