在RequireJS / AMD模块中的JavaScript代码覆盖率

8
简而言之,作者想在RequireJS前端项目中使用代码覆盖率工具,但是尝试了多种方法都无法正常工作。现有的工具对AMD模块支持不佳,或者覆盖范围过大。作者考虑是否需要从头开始开发一个自定义解决方案:通过扩展RequireJS优化器实现内存中的代码仪器和覆盖统计,可以在Jasmine测试运行后查看全局Require对象下的覆盖统计数据。询问大家对这个想法的看法。

代码覆盖率的实现并不简单。你需要使用类似bunker这样的AST技巧来进行操作。 - Raynos
同意。这就是为什么我开始使用现有的AST和仪器库(Esprima,Node-Cover)。我已经完成了大部分RequireJS代码修改,并正在处理仪器和覆盖收集部分。 - Bernardo
5个回答

6

Blanket.js使用修改过的RequireJS加载器与Qunit兼容。我们正在处理Jasmine支持,欢迎任何反馈或建议。

如果您的项目将进入生产阶段,那么Blanket.js并不适用于您,但如果它只是一个副业项目,那么看看它是否符合您的需求也许会有所帮助。

编辑:现在Blanket已经支持Jasmine了。


Blanket 支持 requireJS 中的 jasmine 文档在哪里?我看到了 QUnit 的文档,但没有看到 jasmine。 - rball

3

事实证明,Node-Coverage提供了一个与AMD无关的接口,可以通过其自己的服务器向需要插装代码的RequireJS和Jasmine提供服务。

虽然这种方法不需要运行单独的服务器,但我仍然会花些时间来完善我开始开发的RequireJS覆盖率实现。


2

mochawrapper

我刚写了一个基于mocha、jscoverage和node的assert的node模块,用于自动化测试覆盖率报告。你不需要修改require或使用make或环境变量。

它托管在github上:mochawrapper

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


2

你对AMD模块和JSCoverage有什么具体的问题?我有一个使用AMD模块的设置(QUnit/PhantomJS/JSCoverage)。

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

当我将库路径更改为使用被检测代码而不是“正常”文件时,一切都正常了。


2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接