纽约伊斯坦布尔的仪器是什么?
What is instrumentation in nyc istanbul?
纽约使用的仪器是什么?
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__
以查看覆盖范围。简单地 运行ning 一个检测文件不会生成任何输出
要查看已检测文件的覆盖范围,您可以在 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
正在幕后为您检测您的代码(更正 - 根据@Dining Philosopher - 看起来它实际上并不是 mocha
检测您的代码。它实际上是 nyc
检测代码,因为它知道 mocha
。注意:我还没有在代码中验证这一点)
- 然后
mocha
是 运行ning 检测代码
- 哪些 运行 在收集覆盖率数据时进行测试
- 它为
nyc
提供了生成报告所需的 global.__coverage__
- 最后,
nyc
使用该数据在您的 nyc_output
文件夹中输出报告
希望这一切都有意义...
在 nyc v15.1.0 中,我们可以创建没有检测文件的报告,只需 运行
nyc --reporter=text --report-dir=./nyc_output node file.js
成功了!!
但我认为如果我们想要获得 运行ning 时间报告,我们仍然需要检测文件 运行
在此上下文中的检测意味着在原始代码之间添加一些代码。你可以用一个简单的 nyc instrument example.js
看到这一点。输出看起来很混乱,但却是有效的 javascript,它仍然做与原始程序相同的事情。
重要的是要知道添加的代码有一些 side-effects。在 nyc
的情况下,添加的代码修改了 global.__coverage__
对象(感谢 Ray Perea)。
令人困惑的是,nyc 仅检测经过测试的代码(它知道一些测试框架,例如 mocha)。 要覆盖此行为,请将 --all
标志传递给 nyc
。
一个简单的例子 运行 检测 javascript:
nyc --all node example.js
其中 example.js 包含一些未检测的 javascript(例如 console.log("Hello world"
)。这将检测当前目录中的所有 javascript 个文件(嵌套)并在 运行 node example.js
.
时报告它们的覆盖率
P.S。我本来可以编辑 Ray Perea 的答案,但他们的编辑队列已满。
纽约使用的仪器是什么?
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__
以查看覆盖范围。简单地 运行ning 一个检测文件不会生成任何输出
要查看已检测文件的覆盖范围,您可以在 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
正在幕后为您检测您的代码(更正 - 根据@Dining Philosopher - 看起来它实际上并不是mocha
检测您的代码。它实际上是nyc
检测代码,因为它知道mocha
。注意:我还没有在代码中验证这一点) - 然后
mocha
是 运行ning 检测代码 - 哪些 运行 在收集覆盖率数据时进行测试
- 它为
nyc
提供了生成报告所需的global.__coverage__
- 最后,
nyc
使用该数据在您的nyc_output
文件夹中输出报告
希望这一切都有意义...
在 nyc v15.1.0 中,我们可以创建没有检测文件的报告,只需 运行
nyc --reporter=text --report-dir=./nyc_output node file.js
成功了!!
但我认为如果我们想要获得 运行ning 时间报告,我们仍然需要检测文件 运行
在此上下文中的检测意味着在原始代码之间添加一些代码。你可以用一个简单的 nyc instrument example.js
看到这一点。输出看起来很混乱,但却是有效的 javascript,它仍然做与原始程序相同的事情。
重要的是要知道添加的代码有一些 side-effects。在 nyc
的情况下,添加的代码修改了 global.__coverage__
对象(感谢 Ray Perea)。
令人困惑的是,nyc 仅检测经过测试的代码(它知道一些测试框架,例如 mocha)。 要覆盖此行为,请将 --all
标志传递给 nyc
。
一个简单的例子 运行 检测 javascript:
nyc --all node example.js
其中 example.js 包含一些未检测的 javascript(例如 console.log("Hello world"
)。这将检测当前目录中的所有 javascript 个文件(嵌套)并在 运行 node example.js
.
P.S。我本来可以编辑 Ray Perea 的答案,但他们的编辑队列已满。