istanbul - 什么是纽约伊斯坦布尔的仪器仪表?
问题描述
纽约市使用什么仪器?
nyc 的 instrument 命令可用于在单元测试上下文之外检测源文件:
我认为它将在单元测试之外进行覆盖。我试过了
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
没有任何反应......除了文件执行相同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
正如我在上面演示的那样, using 将在单元测试框架之外进行覆盖。这有点令人困惑,因为文档并不像应有的那样清晰。我找不到关于如何在测试框架之外获得文件覆盖率的好例子,所以我通过查看源代码nyc
以及一些测试框架来弄清楚这一切。
问题是测试框架会为您检测文件,因此当您使用 Mocha 测试框架运行这样的命令时,例如:
nyc --reporter=text mocha --ui bdd test.js
正在发生的事情是:
-nyc
正在执行mocha
......
- 然后mocha
在幕后为您检测您的代码
- 然后mocha
运行该检测代码
- 在收集覆盖率数据的同时运行测试
- 这提供nyc
了global.__coverage__
生成报告所需的信息
- 最后,nyc
使用该数据在您的nyc_output
文件夹中输出报告
希望这一切都有意义...
推荐阅读
- php - 在另一个类中停止 laravel 控制器操作
- javascript - Cordova ES6 模块支持?
- hive - Hive UDF 'org.apache.hadoop.hive.contrib.udf.UDFRowSequence' 为前两条记录生成相同的值
- apache-spark - 从 pyspark 执行 CQL
- java - 禁用 Spring Security https 重定向
- java - org.springframework.beans.NotReadablePropertyException:bean 类的属性无效。百里香 + SpringBoot
- javascript - 如何在 localstorage 中记住附加的 div?
- ruby-on-rails - 从控制器操作调用 Geocoder .near() 引发 MySQL 语法错误 - Rails 5.2
- java - 使用内部类在 JavaFX 中显示三角形
- mysql - 将 Mysql 5.5.33 复制到 MariaDB 5.5.33 问题