为 Selenium 测试生成 Ember 代码覆盖率 运行

Generate Ember code coverage for a Selenium test run

有谁知道如何根据 Selenium 测试生成 Ember 代码覆盖率指标?我在 Groovy/Java.

中编写了几个测试

我找到了人们在伊斯坦布尔这样做的文档。一个例子是 Front End Javascript Test Coverage with Istanbul Selenium

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

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

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

对于 ES6 工具,用于跨浏览器兼容性的应用程序 Babel 有一个可用的 Istanbul 插件。 Istanbul tutorial 展示了如何将其用于 unit 测试。诀窍在于弄清楚如何引导检测过程以将检测过的代码放入 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

(请参阅 install the nyc utility 的这些说明。)

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