哇,真是一团糟。这是方案。
<script data-main="js/main" src="js/require.js" type="text/javascript"></script>
然后在main.js内添加以下配置代码:
require.config(
{
paths:
{
... : ...
}
});
每个主干 View /模型/路由器都是一个“define(...)”模块,并且在main.js中一次调用了“require(“theOneRouter”,...)”。
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将我的所有代码优化为一个main.js,则该组合有效,包括Coverage,但是coverage收集在一个巨大的文件中,很难分析。更不用说需要很长时间才能插入5万行代码的js文件并通过JSTD运行。
我尝试创建一个类似夹具的js文件来加载我的所有Jasmine测试模块和代码模块,但是如果我不分别告诉JSTD每个模块(通过加载html),就会继续返回上述“不匹配”错误,并且/ js固定装置进行真正的加载),它们将不会检测代码覆盖率。
有没有人得到这种特定的组合工作?
也许我要的太多了...
最佳答案
该解决方案正是提倡者提到的。由于JsTestDriver和Require.js竞争成为管理文件/依赖项加载的竞争者,因此当您尝试以Require.js方式(使用匿名模块和定义)100%进行操作时,JsTestDriver会变得合适。相反,您必须命名模块并使用require([...],function(...){...而不是define([...]。)我写了一篇文章,展示了如何集成QUnit,Requirejs,以及JSTD的代码覆盖率:js-test-driver+qunit+coverage+requirejs我在示例中使用QUnit,但是您可以轻松地用QUnit代替Jasmine。为了弄清楚这一点,我考虑仅使用PhantomJS,但是对于我们的用户群来说,拥有跨浏览器至关重要测试,例如IE7,IE8,IE9等,因此单个WebKit不会削减它。JsTestDriver非常有用,但恐怕文档不足会导致开发人员离开。不久,我将在GitHub上获取示例代码。 希望这可以帮助。