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