Ber*_*rdo 7 javascript js-test-driver requirejs backbone.js jasmine
哇,真是一团糟.这就是场景.
RequireJS for AMD功能,初始化如下:
<script data-main="js/main" src="js/require.js" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)
然后在main.js里面输入以下配置代码:
require.config(
{
paths:
{
... : ...
}
});
Run Code Online (Sandbox Code Playgroud)
每个Backbone View/Model/Router都是一个"define(...)"模块,并且"require("theOneRouter",...)"在main.js中被调用一次.
r.js用作Uglify/Closure的优化器.一个'编译'的main.js是在./release子文件夹中创建的,我在.net框架中动态选择.
花了很长时间才能让Backbone + Require.JS工作,但现在效果很好!
然后在上面拍打Jasmine也需要一些定制工作,但它工作得很好.我必须从我的SpecRunner.html加载require.js,使用require的define(...)调用将每个测试模块定义为AMD,并且通过调用require的require(...)调用一次实例化并运行Jasmine在SpecRunner.html中:
require(
[
//"test/specs/testSpec1",
"test/specs/views"
],
function ()
{
jasmine.getEnv().updateInterval = 1000;
var reporter = new jasmine.TrivialReporter();
jasmine.getEnv().addReporter(reporter);
....
....
});
Run Code Online (Sandbox Code Playgroud)
这也太棒了.测试加载和运行,没有问题.要求照顾一切.
现在,我希望像JSTestDriver这样的框架充当我的跑步者.我选择了JSTD,因为它简单,能够在远程浏览器上进行测试,支持代码覆盖,但仍然可以提供其他建议.
JSTestDriver本身工作正常,我唯一的问题是一起运行JSTD + Jasmine + ReuireJS组合.最大的问题是,如果我在配置文件中告诉JSTD关于Jasmine/Require测试模块以加载它,我会收到以下错误:
http://requirejs.org/docs/errors.html#mismatch
如果我使用r.js将我的所有代码优化为一个main.js,则该组合可以工作,包括Coverage,但覆盖范围是在一个巨大的文件上收集的,很难分析.更不用说设备50k行代码的js文件并通过JSTD运行它需要很长时间.
我试图创建一个加载我所有的茉莉花测试模块和代码模块的固定样js文件,但我的回头率上面的"不匹配"的错误,而且,如果我不告诉JSTD有关每个模块独立(通过加载一个html/js fixture执行实际加载)他们不会获得代码覆盖率的检测.
有没有人得到这个特定的组合工作?也许我要求太多了......
小智 4
解决方案正如devadvocate提到的那样。因为 JsTestDriver 和 Require.js 正在竞争管理文件/依赖项的加载,所以当您尝试 100% 以 Require.js 方式(使用匿名模块和定义)执行此操作时,JsTestDriver 会感到不舒服。相反,您必须命名模块并使用 require([...], function(...) {... 而不是 Define([...]。我写了一篇文章,展示了如何集成 QUnit、Requirejs、和 JSTD 的代码覆盖率:js-test-driver+qunit+coverage+requirejs。我在示例中使用 QUnit,但您可以轻松地用 QUnit 替换 Jasmine。在尝试解决这个问题时,我考虑只使用 PhantomJS,但对于我们的用户基础上,我们必须进行跨浏览器测试,IE7、IE8、IE9 等,因此单个 WebKit 是不够的。JsTestDriver 非常有用,但我担心糟糕的文档会让开发人员望而却步。很快我就会'我将在 GitHub 上获取我的示例的代码。希望这会有所帮助。
| 归档时间: |
|
| 查看次数: |
4782 次 |
| 最近记录: |