哇,真是一团糟。这就是场景。
- 骨干驱动的 JS 应用程序。
AMD 功能的 RequireJS,初始化如下:
<script data-main="js/main" src="js/require.js" type="text/javascript"></script>
然后在 main.js 中使用以下配置代码:
require.config( { paths: { ... : ... } });
每个 Backbone View/Model/Router 都是一个“define(...)”模块,并且在 main.js 中调用了一次“require("theOneRouter", ...)”。
r.js 用作 Uglify/Closure 的优化器。在 ./release 子文件夹中创建了一个“已编译”的 main.js,我在 .net 框架中动态选择了该子文件夹。
花了很长时间才让 Backbone + Require.JS 工作,但现在工作得很好!
然后在上面拍打茉莉花也需要一些定制工作,但效果很好。我必须从我的 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); .... .... });
这也很好用。测试加载并运行,没有问题。Require 处理一切。
现在,我想要一个像 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 文件来加载我所有的 Jasmine 测试模块和代码模块,但我不断返回上面的“不匹配”错误,并且,如果我没有单独告诉 JSTD 每个模块(通过加载一个 html /js 夹具进行真正的加载)它们不会被检测到代码覆盖率。
有没有人让这个特定的组合起作用?可能是我要求太高了……