gpt4 book ai didi

istanbul - 什么是纽约 Istanbul 尔的仪器仪表?

转载 作者:行者123 更新时间:2023-12-03 15:40:13 25 4
gpt4 key购买 nike

nyc 中使用的仪器是什么?

nyc's instrument command can be used to instrument source files outside of the context of your unit-tests:



我认为它会在单元测试之外进行覆盖。我试过了
nyc instrument src coverage/instrument

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

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

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

最佳答案

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 运行该文件没有任何 react ...除了文件执行与 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 中输出报告文件夹

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

关于istanbul - 什么是纽约 Istanbul 尔的仪器仪表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58075076/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com