首页 > 解决方案 > 为 Selenium 测试运行生成 Ember 代码覆盖率

问题描述

有谁知道如何从 Selenium 测试中生成 Ember 代码覆盖率指标?我有几个用 Groovy/Java 编写的测试。

我发现有人在伊斯坦布尔这样做的文件。一个例子是伊斯坦布尔 Selenium 的前端 Javascript 测试覆盖率

还有一个Ember CLI 代码覆盖工具,它建立在伊斯坦布尔生产的工具之上。然而,从我目前收集到的信息来看,这个工具似乎完全围绕着伊斯坦布尔工具,因此只允许在构建时间之前为 ember 单元和集成测试生成代码覆盖率统计信息。它存储自己的从伊斯坦布尔结果到 Ember 代码的映射的位置并不明显,至少对于像我这样的 Java 开发人员来说不是。

我正在寻找一种方法来生成仅供内部使用的战争文件,该文件同时具有伊斯坦布尔检测和到 ember 代码的映射,并且 Selenium 可以触发以生成 Ember 代码覆盖率报告。任何有关如何做到这一点的见解将不胜感激。

标签: seleniumember.jsistanbulember-cli-code-coverage

解决方案


事实证明,上述观点没有解决的主要障碍不是 Ember 本身,它基本上只是 Javascript。问题在于 Ember 基于较新的 ES6 版本的 Javascript,而伊斯坦布尔的原始版本是为 ES5 编写的。

对于 ES6 工具,用于跨浏览器兼容性的应用程序 Babel 有一个可用的 Istanbul 插件。这个伊斯坦布尔教程展示了如何使用它进行单元测试。诀窍在于弄清楚如何引导检测过程以将检测代码放入一个war文件,然后将其分派到浏览器可以访问的服务器。(我们的 Ember 专家发现了这一点,因此我无法在此回复中概述该解决方案。)

一旦服务器使用您的 Selenium 测试可以命中的 war 文件运行,您必须将代码添加到测试的末尾(就在它们离开该站点之前)以访问 window.__coverage__ 对象并将其输出到文件每个测试会话结束。有关如何执行此操作的示例,请参阅类似问题的答案:https ://sqa.stackexchange.com/a/41715/29877 。

假设您编写该代码以将一个或多个覆盖率文件输出到名为“usage”的目录并在其旁边创建另一个名为“coverage”的目录。然后,您可以从它们的公共父目录运行此命令,以在“coverage”目录中生成基本的 html 报告:

nyc report --exclude-after-remap=false --report-dir=./coverage --reporter=html -t ./usage

(请参阅这些说明以安装 nyc 实用程序。)

现在您可以通过在浏览器中打开 coverage/index.html 来查看该报告。当然,nyc 有几个 --reporter 选项可用于生成其他类型的报告。


推荐阅读