nyc 中使用的仪器是什么?
nyc 的仪器命令可用于检测单元测试上下文之外的源文件:
我认为它会在单元测试之外进行覆盖。我试过了
nyc instrument src coverage/instrument
Run Code Online (Sandbox Code Playgroud)
然后运行应用程序并尝试访问端点
npm start
Run Code Online (Sandbox Code Playgroud)
但是当我执行上述操作时,它不会生成文件,nyc_output因此无法报告任何内容。
我必须完成nyc instrument命令吗?怎么办?
Ray*_*rea 12
nyc instrument用于检测您的代码。它产生的输出在运行时将收集覆盖数据。这是没用的,除非你真的用这些数据做一些事情……比如报告它或以某种方式使用它。当您运行一个已检测过的文件时,它会将覆盖率数据存储在global.__coverage__我相信中。然后,您可以使用该数据执行您想要的操作。因此,您可以创建一个将运行检测文件的报告器,然后global.__coverage__查看覆盖范围。简单地运行一个检测过的文件不会产生任何输出
要查看已检测文件的覆盖范围,您可以require在检测文件的位置创建自己的报告器,然后查看global.__coverage__或运行该nyc命令以像正常一样生成覆盖数据。
这里有一些例子:
假设您有一个file.js要检查其覆盖率的文件,并且您已经运行了以下命令:
nyc instrument file.js > file_instrumented.js
Run Code Online (Sandbox Code Playgroud)
现在,您将拥有一个名为的文件file_instrumented.js,其中包含生成代码覆盖率所需的所有代码。
如果我在node file_instumented.js没有任何反应的情况下运行该文件...除了文件执行与file.js
但是,如果我创建一个coverage.js使用此代码命名的文件:
require("./file_instrumented.js");
console.log(global.__coverage__)
Run Code Online (Sandbox Code Playgroud)
然后,我运行node coverage.js你就可以看到覆盖率数据了。然后你可以输出任何你想要的数据。这是对覆盖数据的较低级别访问
如果要在其中生成报告,则nyc_output需要nyc针对已检测的文件使用该命令。例如,这样的事情:
nyc --reporter=text --report-dir=./nyc_output node file_instrumented.js
Run Code Online (Sandbox Code Playgroud)
如果您使file_instrumented.js文件可执行,这样的命令也可以工作:
nyc --reporter=text --report-dir=./nyc_output file_instrumented.js
Run Code Online (Sandbox Code Playgroud)
但是,如果我们尝试对原始命令运行相同的命令,file.js如下所示:
nyc --reporter=text --report-dir=./nyc_output node file.js
Run Code Online (Sandbox Code Playgroud)
您会看到我们收到一份没有显示覆盖范围的报告。这是因为file.js文件没有被检测,因此没有给nyc记者任何要报告的数据
nyc instrument正如我上面演示的那样,使用将覆盖单元测试框架之外的内容是正确的。这有点令人困惑,因为文档并不像应有的那样清晰。关于如何覆盖测试框架之外的文件,我找不到很好的例子,所以我通过查看源代码nyc以及一些测试框架来弄清楚这一切。
问题是测试框架会为您检测文件,因此当您使用 Mocha 测试框架运行这样的命令时,例如:
nyc --reporter=text mocha --ui bdd test.js
Run Code Online (Sandbox Code Playgroud)
发生的事情是:
-nyc正在执行mocha......
- 然后mocha在幕后为您检测您的代码
- 然后mocha运行该检测的代码
- 在收集覆盖率数据的同时运行测试
- 这给出nyc了global.__coverage__它需要生成报告
- 最后,nyc使用该数据在您的nyc_output文件夹中输出报告
希望这一切都有意义...
| 归档时间: |
|
| 查看次数: |
2249 次 |
| 最近记录: |