我正试图在Google Closure客户机-服务器项目中获得单元测试的代码覆盖率。我们有服务器端的代码覆盖率,需要客户端覆盖率。
JSCover 运行自己的服务器。我们的cleint端单元测试需要在服务器下运行才能访问特定的服务。我看不出有什么方法可以让他们一起工作,但一个关于如何这样做的建议将是理想的。
istanbul 支持许多底层框架,但Google Closure似乎不是其中之一。有没有一种简单的方法可以通过谷歌闭包单元测试来使用伊斯坦布尔?
Blanket 似乎不再得到支持。最近有没有人有任何经验表明,它可能仍然与谷歌关闭工作?
在客户端-服务器配置中,是否有其他覆盖工具可以很好地与Google Closure配合使用?
伊斯坦布尔与谷歌合作良好 goog.testing.testSuite using Istanbul with IoT.js
goog.testing.testSuite
更具体地说,这里概述了我们如何在伊斯坦布尔测试我们自己的Google闭包,以生成代码覆盖率信息:
Node.js .
使用节点。js包管理器,使用命令安装伊斯坦布尔命令行工具 npm install --save-dev nyc
npm install --save-dev nyc
在我们的例子中,我们使用自定义服务器代码,因此在Node下运行我们的测试套件。js不是一个选项。我添加了一个服务器端调用,该调用接受文件名和文件内容,并使用该调用收集代码覆盖率统计信息。如果您不需要从JavaScript测试中使用自己的服务器代码,那么使用Node会更简单。js作为服务器。请参阅将伊斯坦布尔与物联网结合使用的链接。js(上图)提供了一些想法。
在每个需要代码覆盖率的文件中,运行伊斯坦布尔的命令行工具来检测文件的覆盖率。命令将类似于 nyc instrument myfile.js coverage_output_directory . 这会改变你的。js文件,所以请确保在某个地方有一个副本,可以用来还原文件。我使用Python脚本查找各种文件的工具。
nyc instrument myfile.js coverage_output_directory
在每个Google Closure测试文件中,将以下内容添加到文件末尾:
window.onbeforeunload = function( event ) { /** @const {!FileUploadService} */ var fileUploadService = new FileUploadService( "../.." ); fileUploadService.upload( "coverage_output_directory.myfile.data", JSON.stringify( __coverage__ ) ); };
FileUploadService
运行测试。
使用伊斯坦布尔和报告生成器创建代码覆盖率报告。例如 nyc report --reporter=lcov --temp-directory=coverage_output_directory
nyc report --reporter=lcov --temp-directory=coverage_output_directory
使用浏览器通过加载检查代码覆盖率 coverage_output_directory/lcov-report/index.html .
coverage_output_directory/lcov-report/index.html
JSCover运行自己的服务器
更准确的说法是“JSCover可以运行自己的服务器”。您还可以检测JavaScript文件并将其部署到服务器,运行测试并收集覆盖率。有一个有效的例子 here