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

Any JavaScript code coverage tools for client-server apps in Google Closure?

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

JSCover 运行自己的服务器。我们的客户端单元测试需要在我们的服务器下使用 运行 才能访问特定服务。我看不到让它们协同工作的方法,但最好能提供有关如何协同工作的建议。

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

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

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

JSCover runs its own server

更准确地说是"JSCover can run its own server"。您还可以检测 JavaScript 文件并将它们部署到您的服务器,运行 您的测试并收集覆盖率。有一个工作示例 here.

Istanbul 与 Google Closure 和 goog.testing.testSuite 配合使用效果很好,但如何设置它并不明显。通常,请遵循 using Istanbul with IoT.js.

的说明

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

  1. 安装Node.js.

  2. 使用 Node.js 包管理器,使用命令 npm install --save-dev nyc.

  3. 安装伊斯坦布尔命令行工具
  4. 在我们的案例中,我们使用自定义服务器代码,因此 运行 在 Node.js 下设置我们的测试服不是一个选项。我添加了一个接受文件名和文件内容的服务器端调用,并使用此调用来收集代码覆盖率统计信息。如果您不需要使用 JavaScript 测试中的自己的服务器代码,使用 Node.js 作为服务器会更简单。有关一些想法,请参阅 link 与 IoT.js 一起使用伊斯坦布尔(上文)。

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

  6. 在每个 Google 关闭测试文件中,将此添加到文件末尾:

    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. 使用 Istanbul 和报告生成器创建代码覆盖率报告。例如,nyc report --reporter=lcov --temp-directory=coverage_output_directory。这使用 lcov 报告生成器,它与伊斯坦布尔一起安装并创建一个漂亮的报告。

  4. 通过加载 coverage_output_directory/lcov-report/index.html.

  5. 使用浏览器检查代码覆盖率