【发布时间】: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