8

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

由于 JS 世界中 TDD 方法的流行以及 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 测试运行之后。

输入?

4

5 回答 5

6

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

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

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

于 2012-11-06T17:35:00.460 回答
3

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

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

于 2012-06-19T14:59:11.150 回答
2

AMD 模块和 JSCoverage 到底有什么问题?我有一个运行 AMD 模块的设置(QUnit/PhantomJS/JSCoverage)。

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

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

于 2012-07-12T14:23:32.407 回答
2

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

于 2012-07-18T09:08:34.463 回答
2

摩卡包装

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

它托管在 github 上: mochawrapper

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

于 2012-08-22T08:50:54.280 回答