Jasmine + JSTestDriver + Coverage + RequireJS
Jasmine + JSTestDriver + Coverage + RequireJS
哇,真是一团糟。这是场景。
- 骨干驱动的JS应用程序。
-
RequireJS for AMD 功能,初始化如下:
<script data-main="js/main" src="js/require.js" type="text/javascript"></script>
然后在 main 中.js以下配置代码:
require.config( { paths: { ... : ... } });
每个主干视图/模型/路由器都是一个"定义(...)"模块,并且"require("theOneRouter",...)"在main.js中被调用一次。
-
r.js 用作 Uglify/Closure 的优化器。一个"编译"的主.js是在 ./release 子文件夹中创建的,我在 .net 框架中动态选择该子文件夹。
-
花了相当长的时间让骨干 + 需求.JS工作,但现在工作得很好!
-
然后把茉莉花拍在上面也需要一些定制工作,但它工作得很好。我必须从我的 SpecRunner.html 加载 require.js,使用 require 的 define(...) 调用将每个测试模块定义为 AMD,并且我在 SpecRunner 中从调用 require(...) 调用实例化并运行 Jasmine.html:
require( [ //"test/specs/testSpec1", "test/specs/views" ], function () { jasmine.getEnv().updateInterval = 1000; var reporter = new jasmine.TrivialReporter(); jasmine.getEnv().addReporter(reporter); .... .... });
这也很好用。测试加载和运行,没有问题。需要照顾一切。
现在,我希望像JSTestDriver这样的框架充当我的运行器。我选择 JSTD 是因为它简单、能够在远程浏览器上进行测试、代码覆盖率支持,但我仍然愿意接受其他建议。
JSTestDriver 本身工作正常,我唯一的问题是一起运行 JSTD + Jasmine + ReuireJS 组合。最大的问题是,如果我在配置文件中告诉 JSTD 关于 Jasmine/Require 测试模块以加载它,我会收到以下错误:
http://requirejs.org/docs/errors.html#mismatch
如果我使用 r.js 将所有代码优化为一个主.js,则组合有效,包括覆盖率,但覆盖率收集在一个巨大的文件中并且难以分析。更不用说检测一个 50k 行代码的 js 文件并通过 JSTD 运行它需要很长时间。
我尝试创建一个类似夹具的js文件来加载我所有的Jasmine测试模块和代码模块,但是我一直回到上面的"不匹配"错误,而且,如果我不单独告诉JSTD每个模块(通过加载执行实际加载的html/js夹具),它们将不会检测代码覆盖率。
有没有人让这种特定的组合起作用?也许我要求太多了...
解决方案与开发倡导者提到的完全一样。因为 JsTestDriver 和 Require.js 正在竞争成为管理文件/依赖项加载的人,所以当你尝试 100% 以 Require.js 的方式(使用匿名模块和定义)执行此操作时,JsTestDriver 会抛出一个合适的选择。相反,你必须命名你的模块并使用require([...],function(...)。{...而不是定义([...]。我写了一篇文章,展示了如何将QUnit,Requirejs和代码覆盖率与JSTD集成:js-test-driver+qunit+coverage+requirejs。我在我的示例中使用 QUnit,但您可以轻松地用 QUnit 代替 Jasmine。在试图解决这个问题时,我考虑只使用 PhantomJS,但对于我们的用户群来说,我们必须进行跨浏览器测试,IE7、IE8、IE9 等,所以单个 WebKit 不会削减它。JsTestDriver 非常有用,但恐怕糟糕的文档会让开发人员望而却步。很快,我将在GitHub上获取我的示例的代码。希望这有帮助。
我无法让它工作,最终使用 PhantomJS 来运行我的茉莉花测试。 http://phantomjs.org/
您是否尝试过命名待测试的模块并在测试中使用 require 而不是定义?
https://github.com/podefr/jasmine-reqjs-jstd
编辑:
我刚刚发布了一个开源工具包,希望它能帮助其他人,就像它帮助我一样。它是许多开源工具的组合,为您提供了一个开箱即用的 requirejs 主干应用程序。
它提供了单个命令来运行:dev Web server,jasmine Single browser test runner,jasmine js-test-driver multi browser test runner,以及 JavaScript 和 CSS 的串联/缩小。它还输出应用的未缩小版本以进行生产调试,预编译车把模板,并支持国际化。无需设置。它只是工作。
它还支持待测的未命名模块。
http://github.com/davidjnelson/agilejs
看看这个存储库(Bredele appolo),它是一个在加载了require.js和JsTestDriver的匿名模块上运行Jasmine BDD规范的环境。
如果您正在开发非匿名模块,我还建议您使用 podefr 解决方案。
奥利维尔
- 以可优化的方式使用requirejs加载模板
- RequireJS向模块传递配置总是返回undefined
- PhoneGap/带有RequireJS's的文本插件
- 如何正确地将参数传递给RequireJS回调函数
- 在requirejs中共享实例化对象
- What does requirejs.config() do?
- 将javascript应用程序迁移到使用AMD的提示(例如requirejs)
- 为什么谷歌地图API's方法未从RequireJS中正确调用
- 创建一个可重用的RequireJs库
- angularjs、因果报应和requirejs测试用例错误
- 在RequireJS define函数中如何处理参数
- 如何为requirejs和qunit设置grunt任务
- 将broccoliJS与当前使用requireJS的模块化主干应用程序结合使用,我想完全放弃requireJS
- 使用requireJS的jqGrid-网格加载但不起作用
- requirejs定义:嵌套依赖关系
- Backbone+RequireJS+Mediator模式导致视图逻辑短路和无限循环
- 何时使用Requirejs以及何时使用捆绑的javascript
- 'define' 在 RequireJS 和 Webapp Yo 生成器上未定义错误
- Backbone+RequireJS:使集合持久化
- Jasmine + JSTestDriver + Coverage + RequireJS