哇,真是一团糟。这就是情景。
- Backbone driven JS app.
RequireJS for AMD functionality, initialized like this:
<script data-main="js/main" src="js/require.js" type="text/javascript"></script>
then inside main.js the following config code:
require.config( { paths: { ... : ... } });
Each Backbone View/Model/Router is a "define(...)" module, and "require("theOneRouter", ...)" is called once in main.js.
r.js used as optimizer with Uglify/Closure. One 'compiled' main.js is created in a ./release subfolder which I pick dynamically within my .net framework.
Took quite a while to get the Backbone + Require.JS to work, but works great now!
Then slapping Jasmine on top of that also took a little custom work, but it worked just fine. I had to load require.js from my SpecRunner.html, define each test module as an AMD using require's define(...) call, and I instantiate & run Jasmine once from a call to require's require(...) call once in the SpecRunner.html:
require( [ //"test/specs/testSpec1", "test/specs/views" ], function () { jasmine.getEnv().updateInterval = 1000; var reporter = new jasmine.TrivialReporter(); jasmine.getEnv().addReporter(reporter); .... .... });
this too works great. Tests load & run, no issues. Require takes care of everything.
JSTestDriver本身运行良好,唯一的问题是如何同时运行JSTD + Jasmine + RequireJS组合。最大的问题是,如果我告诉配置文件中的JSTD有一个Jasmine/Require测试模块需要加载,我会得到以下错误:
http://requirejs.org/docs/errors.html#mismatch
如果我使用r.js将所有代码优化为一个main.js,合并可以工作,包括覆盖率,但覆盖率仅在一个巨大的文件中收集,难以分析。更何况,对于50k行代码的js文件进行测试很耗时,并通过JSTD运行。我尝试创建一个类似fixture的js文件,加载所有的Jasmine测试模块和代码模块,但我一直遇到上述“不匹配”错误,而且如果我没有告诉JSTD每个模块(通过加载真正的加载html/js fixture)它们将不会获得代码覆盖率测量。
有人已经让这个特定的组合工作了吗?也许我要求太多了...