我正在尝试在Google Closure Cloture Client-Server项目中获得单位测试的代码覆盖率。我们有服务器端的代码覆盖范围,需要客户侧覆盖。
JScover运行自己的服务器。我们的Cleint侧单元测试要求在服务器下运行以访问特定服务。我看不到使他们一起工作的方法,但是关于如何做的建议是理想的。
伊斯坦布尔支持许多基础框架,但Google Closure似乎并不是其中之一。是否有一种简单的方法可以通过Google闭合单元测试使用伊斯坦布尔?
毛毯似乎不再受到支持。是否有人有最近的经验表明它仍然可以与Google关闭一起使用?
是否还有其他覆盖范围工具可以很好地与客户端服务器配置中的Google关闭?
伊斯坦布尔与Google Closure和goog.testing.testSuite
配合良好,尽管如何设置它并不明显。通常,按照将伊斯坦布尔与iot.js一起使用的说明。
更具体地说,这是我们如何使用伊斯坦布尔进行自己的Google闭合测试来生成代码覆盖范围信息的概述:
-
安装node.js。
-
使用node.js软件包管理器,使用命令
npm install --save-dev nyc
。
安装istanbul命令行工具 在我们的情况下,我们使用自定义服务器代码,因此在Node.js下运行测试套件不是一个选择。我添加了一个接受文件名和文件内容的服务器端调用,并使用此调用来收集代码覆盖范围统计信息。如果您不需要从JavaScript测试中使用自己的服务器代码,则将Node.js用作服务器更容易。请参阅与Iot.js一起使用伊斯坦布尔的链接(上)。
在需要的代码覆盖范围的每个文件中,运行伊斯坦布尔的命令行工具来启动文件以进行覆盖。该命令看起来像
nyc instrument myfile.js coverage_output_directory
。这会更改您的.js文件,因此请确保在某个地方可以使用该副本来还原文件。我使用python脚本来找到各种文件。在每个Google关闭测试文件中,将其添加到文件末尾:
window.onbeforeunload = function( event ) { /** @const {!FileUploadService} */ var fileUploadService = new FileUploadService( "../.." ); fileUploadService.upload( "coverage_output_directory.myfile.data", JSON.stringify( __coverage__ ) ); };
为每个测试文件使用唯一的输出文件名。FileUploadService
是我们用于在服务器上保存结果文件的对象。您将需要用自己的服务替换它,或在Node.js中使用该服务。
-
运行测试。
-
还原备份中所有更改的文件。
-
使用伊斯坦布尔和报告生成器来创建代码覆盖报告。例如,
nyc report --reporter=lcov --temp-directory=coverage_output_directory
。这使用LCOV报告生成器,该生成器与伊斯坦布尔安装并创建一个不错的报告。 -
通过加载
coverage_output_directory/lcov-report/index.html
。
,使用浏览器检查代码覆盖范围
JScover运行自己的服务器
说" JScover可以运行自己的服务器"将更加准确。您还可以启动JavaScript文件并将其部署到服务器,运行测试并收集覆盖范围。这里有一个工作示例。