繁体   English   中英

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

[英]JavaScript code coverage in RequireJS / AMD modules

简短而且看似愚蠢的问题,因为这么简单,你会想到无处不在:有没有人在RequireJS前端项目(非NodeJS)中使用任何类型的代码覆盖?

这似乎是一个愚蠢的问题,因为JS世界中TDD方法的普及以及AMD开发的接管。

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

1)带有Coverage插件的JSTD。 JSTD无法正确加载和检测AMD模块。 如果我在单个js文件上运行JSTD(由RequireJS优化器组合),那么代码覆盖率可以很好地工作,除了收集覆盖范围并在ENTIRE文件上定义度量标准。 太棒了,这没用,因为它包括第三方库,因为我无法针对单个单元来帮助测试开发。 哎呀。

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

3)特定于Chrome和Firebug的“现场”指导员 - 失败,不喜欢AMD模块。

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

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

输入?

Blanket.js使用修改后的RequireJS加载程序与Qunit一起使用。 我们正致力于Jasmine的支持,并乐意接受任何反馈或建议。

如果您的项目正在投入生产,Blanket.js不适合您,但如果它只是一个侧面项目,那么它是否值得查看它是否符合您的需求。

编辑:Blanket现在支持Jasmine。

好吧,事实证明Node-Coverage实际上提供了一个AMD不可知的接口,它可以与RequireJS和Jasmine一起使用,通过提供从其自己的服务器检测的代码。

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

究竟是你的AMD模块和JSCoverage的问题? 我有一个运行AMD模块的设置(QUnit / PhantomJS / JSCoverage)。

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

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

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

mochawrapper

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

它托管在github: mochawrapper上

jscoverage可能无法在浏览器中运行,因此您可能需要查看:基于uglify-js的Bunker

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM