2

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

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

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

毯子似乎不再受支持。有没有人最近有任何经验表明它仍然可以与 Google Closure 一起使用?

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

4

2 回答 2

1

Istanbul 可以很好地与 Google Closure 和 一起使用goog.testing.testSuite,尽管如何设置它并不明显。一般来说,请按照说明将 Istanbul 与 IoT.js 结合使用

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

  1. 安装Node.js

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

  3. 在我们的例子中,我们使用自定义服务器代码,因此在 Node.js 下运行我们的测试套件不是一种选择。我添加了一个接受文件名和文件内容的服务器端调用,并使用此调用来收集代码覆盖率统计信息。如果您不需要在 JavaScript 测试中使用自己的服务器代码,则使用 Node.js 作为服务器会更简单。有关一些想法,请参阅将 Istanbul 与 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__ ) );
    };
    

为每个测试文件使用唯一的输出文件名。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

于 2017-12-05T00:09:53.230 回答
0

JSCover 运行自己的服务器

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

于 2017-09-28T01:11:49.683 回答