Google Closure中针对客户端 - 服务器应用的任何JavaScript代码覆盖工具?

时间:2017-09-26 22:34:16

标签: javascript istanbul google-closure-library blanket.js jscoverage

我正在尝试在Google Closure客户端 - 服务器项目中获取单元测试的代码覆盖率。我们有服务器端的代码覆盖,需要客户端覆盖。

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

istanbul支持许多底层框架,但Google Closure似乎不是其中之一。是否有一种简单的方法可以使用istanbul进行Google Closure单元测试?

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

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

2 个答案:

答案 0 :(得分:0)

  

JSCover运行自己的服务器

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

答案 1 :(得分:0)

伊斯坦布尔与Google Closure和goog.testing.testSuite配合得很好,虽然如何设置它并不明显。通常,请按照using Istanbul with IoT.js的说明进行操作。

更具体地说,这里是我们如何使用伊斯坦布尔对我们自己的Google Closure测试进行检测以生成代码覆盖率信息的概述:

  1. 安装Node.js

  2. 使用Node.js包管理器,使用命令npm install --save-dev nyc安装Istanbul命令行工具。

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

  4. 在需要代码覆盖率的每个文件中,运行Istanbul的命令行工具来检测文件的覆盖范围。该命令看起来像nyc instrument myfile.js coverage_output_directory。这会更改.js文件,因此请确保在可用于还原文件的位置具有副本。我使用Python脚本查找各种文件的工具。

  5. 在每个Google Closure测试文件中,将其添加到文件末尾:

    window.onbeforeunload = function( event ) {
      /** @const {!FileUploadService} */
      var fileUploadService = new FileUploadService( "../.." );
      fileUploadService.upload( "coverage_output_directory.myfile.data", JSON.stringify( __coverage__ ) );
    };
    
  6. 为每个测试文件使用唯一的输出文件名。 FileUploadService是我们用于在服务器上保存结果文件的对象;您需要将此替换为您自己的服务,或使用Node.js中的那个。

    1. 运行测试。

    2. 从备份中恢复所有已更改的文件。

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

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