2017-09-26 59 views
0

我正在尝试在Google Closure客户端 - 服务器项目中获取单元测试的代码覆盖范围。我们有服务器端的代码覆盖,并需要客户端覆盖。Google Closure中的客户端 - 服务器应用程序的任何JavaScript代码覆盖工具?

JSCover运行它自己的服务器。我们的cleint侧面单元测试需要在我们的服务器下运行以访问特定的服务。我没有看到让他们一起工作的方法,但是如何做到这一点的建议是理想的。

istanbul支持许多底层框架,但Google Closure似乎并不是其中之一。有一个简单的方法来使用谷歌封闭单元测试伊斯坦布尔?

Blanket似乎不再支持。有没有人有最近的经验表明它可能仍然适用于Google Closure?

是否有其他的覆盖工具可以在客户端 - 服务器配置中与Google Closure配合使用?

回答

0

伊斯坦布尔在Google Closure和goog.testing.testSuite中运行良好,但不清楚如何设置它。通常,请按照using Istanbul with IoT.js的说明进行操作。

更具体地说,这里是我们如何仪器自己关闭谷歌测试与伊斯坦布尔生成代码覆盖信息的大纲:

  1. 安装Node.js

  2. 使用Node.js程序包管理器,使用命令npm install --save-dev nyc安装伊斯坦布尔命令行工具。

  3. 在我们的例子中,我们使用自定义服务器代码,所以在Node.js下运行我们的测试套件不是一个选项。我添加了一个接受文件名和文件内容的服务器端调用,并使用此调用来收集代码覆盖率统计信息。如果您不需要从JavaScript测试中使用自己的服务器代码,那么使用Node.js作为服务器会更简单。有关如何使用伊斯坦布尔IoT.js(上图)的链接,请参阅以下链接。

  4. 在每个需要代码覆盖的文件中,运行伊斯坦布尔的命令行工具来检测覆盖文件。该命令看起来像nyc instrument myfile.js coverage_output_directory。这会更改您的.js文件,因此请务必在可用于恢复文件的位置有一个副本。我使用Python脚本来查找各种文件的工具。

  5. 在每一个谷歌封测文件,将其添加到文件的末尾:

    window.onbeforeunload = function(event) { 
        /** @const {!FileUploadService} */ 
        var fileUploadService = new FileUploadService("../.."); 
        fileUploadService.upload("coverage_output_directory.myfile.data", JSON.stringify(__coverage__)); 
    }; 
    

每个测试文件使用唯一的输出文件名。FileUploadService是我们用来在服务器上保存结果文件的对象;您需要将其替换为您自己的服务,或者使用Node.js.中的一个。

  1. 运行您的测试。

  2. 从备份中还原所有更改的文件。

  3. 使用伊斯坦布尔和报告生成器来创建代码覆盖率报告。例如,nyc report --reporter=lcov --temp-directory=coverage_output_directory。这使用lcov报告生成器,它与伊斯坦布尔一起安装并创建一个很好的报告。

  4. 使用浏览器通过加载coverage_output_directory/lcov-report/index.html来检查代码覆盖率。

0

JSCover运行自己的服务器

这将是更准确的说“JSCover可以运行自己的服务器”。您还可以测试您的JavaScript文件并将其部署到您的服务器,运行测试并收集覆盖范围。有一个工作示例here

相关问题