Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RequireJS/AMD模块中的JavaScript代码覆盖率_Javascript_Unit Testing_Code Coverage_Requirejs_Js Amd - Fatal编程技术网

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

RequireJS/AMD模块中的JavaScript代码覆盖率,javascript,unit-testing,code-coverage,requirejs,js-amd,Javascript,Unit Testing,Code Coverage,Requirejs,Js Amd,一个简短而看似愚蠢的问题,因为它非常简单,而且你会认为它无处不在:有没有人在RequireJS前端项目(非NodeJS)中获得过任何类型的代码覆盖率 这似乎是一个愚蠢的问题,因为TDD方法在JS世界的流行以及AMD开发的接管 我已经尝试了一百万种方法,但都没有。我的项目是一个带有Jasmine单元测试的主干项目: 1) JSTD和覆盖插件。JSTD无法正确加载和检测AMD模块。如果我在一个js文件(由RequireJS优化器组合)上运行JSTD,那么代码覆盖率工作得很好,除了覆盖率随后被收集并在

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

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

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

1) JSTD和覆盖插件。JSTD无法正确加载和检测AMD模块。如果我在一个js文件(由RequireJS优化器组合)上运行JSTD,那么代码覆盖率工作得很好,除了覆盖率随后被收集并在整个文件上定义度量之外。很好,这是无用的,因为它包括第三方库,而且因为我不能针对单个单元来帮助测试开发。啊

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

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

我尝试的每一种方法似乎都需要大量的定制工作。 所以也许我需要从头开始设计一个定制的解决方案

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

输入?

事实证明,它实际上提供了一个AMD不可知接口,通过提供从自己的服务器插入的代码,它可以与RequireJS和Jasmine配合使用


我仍然会花一些时间在我开始的RequireJS coverage实现上,因为它不需要运行单独的服务器。

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

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


在我更改库路径以使用插入指令的代码而不是“普通”文件后,一切都正常了。

查看我最近发布的项目,在浏览器覆盖率报告中使用easy javascript,JSCovReporter

Mochawraper

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

它托管在github上:

jscoverage可能不在浏览器中运行,因此您可能想看看:它基于uglify js,使用经过修改的RequireJS加载程序与Qunit一起工作。我们正在为Jasmine提供支持,并将乐于接受任何反馈或建议

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


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

代码覆盖率对于实现来说是非常重要的。你得用bunker之类的东西来对付AST hackery。同意。这就是为什么我开始使用现有的AST和instrumentation库(Esprima,NodeCover)。我已经完成了大部分的RequireJS代码修改,并且正在处理instrumentation&coverage collection部分。关于Blanket支持jasmine与RequireJS的文档在哪里?我在这上面看到了Qunit文档,但没有jasmine。