【问题标题】:JavaScript code coverage in RequireJS / AMD modulesRequireJS / AMD 模块中的 JavaScript 代码覆盖率
【发布时间】:2012-06-16 16:18:32
【问题描述】:

一个简短而看似愚蠢的问题,因为它如此简单而且你会认为无处不在:有没有人获得任何类型的代码覆盖以在 RequireJS 前端项目(非 NodeJS)中工作?

由于 TDD 方法在 JS 世界中的流行以及 AMD 开发的接管,这似乎是一个愚蠢的问题。

我已经尝试了一百万种方法,但都缺乏。我的项目是一个带有 Jasmine 单元测试的 Backbone 项目:

1) 带有 Coverage 插件的 JSTD。 JSTD 无法正确加载和检测 AMD 模块。如果我在单个 js 文件(由 RequireJS 优化器组合)上运行 JSTD,那么代码覆盖率会很好地工作,除了随后收集覆盖率并在整个文件上定义指标。太好了,那没用,因为它包括 3rd 方库,而且我不能针对单个单元来帮助测试开发。啊。

2) JSCoverage - 完全失败,不喜欢 AMD 模块。

3) Chrome 特定和 Firebug 特定的“实时”仪器 - 失败,不喜欢 AMD 模块。

我尝试的每一种方法似乎都需要大量的定制工作。 那么也许我需要从头开始编写自定义解决方案?

以下方法如何:将 RequireJS 优化器扩展为检测代码并创建覆盖率。这将是内存检测,可以使用 require.config({ instrument: true }) 标志启用。每次 require 加载一个模块时,它都会自动检测它并将其放置在其模块存储库中。覆盖率统计信息收集在全局 require 对象下的一个对象中,并且可以从任何地方访问,例如在 Jasmine 测试运行之后。

输入?

【问题讨论】:

  • 代码覆盖率的实现并非易事。你必须用 bunker 之类的东西来做 AST 黑客。
  • 同意。这就是我开始使用现有 AST 和仪器库(Esprima、Node-Cover)的原因。我已经完成了大部分 RequireJS 代码修改,并且正在处理检测和覆盖收集部分。

标签: javascript unit-testing code-coverage requirejs js-amd


【解决方案1】:

Blanket.js 使用修改后的 RequireJS 加载器与 Qunit 一起工作。我们正在努力为 Jasmine 提供支持,并且很乐意接受任何反馈或建议。

如果您的项目要投入生产,Blanket.js 不适合您,但如果它只是一个副项目,那么它是否满足您的需求可能值得一看。

编辑:毯子现在支持茉莉花。

【讨论】:

  • Blanket 使用 requireJS 支持 jasmine 的文档在哪里?我看到了 Qunit 文档,但没有看到 jasmine。
【解决方案2】:

事实证明Node-Coverage 实际上提供了一个与 AMD 无关的接口,该接口与 RequireJS 和 Jasmine 一起工作得很好,通过提供要从自己的服务器检测的代码。

我仍然会花一些时间来研究我开始的 RequireJS 覆盖实现,因为它不需要运行单独的服务器。

【讨论】:

    【解决方案3】:

    您对 AMD 模块和 JSCoverage 的具体问题是什么? 我有一个运行 AMD 模块的设置(QUnit/PhantomJS/JSCoverage)。

    也许您只是忘记在 require.config 中正确设置库路径?

    在我更改库路径以使用检测代码而不是“正常”文件后,一切正常。

    【讨论】:

      【解决方案4】:

      查看我最近发布的项目,以获得简单的 javascript 浏览器内覆盖率报告,JSCovReporter https://github.com/TwoApart/JSCovReporter

      【讨论】:

        【解决方案5】:

        mochawrapper

        我刚刚编写了一个自动覆盖报告的节点模块。它基于 mocha、jscoverage 和 node 的 assert。您不必修改 require 或使用 make 或 enviornment 变量。

        它托管在 github 上: mochawrapper

        jscoverage 可能不在浏览器中运行,所以你可能想看看:bunker 它基于 uglify-js

        【讨论】:

          猜你喜欢
          • 2018-09-30
          • 1970-01-01
          • 2023-04-05
          • 1970-01-01
          • 2011-06-24
          • 2014-03-26
          • 1970-01-01
          • 2012-06-30
          • 1970-01-01
          相关资源
          最近更新 更多