哇,真是一团糟。这是方案。

  • 主干驱动的JS应用程序。
  • RequireJS用于AMD功能,初始化如下:
    <script data-main="js/main" src="js/require.js" type="text/javascript"></script>
    

    然后在main.js内添加以下配置代码:
    require.config(
    {
        paths:
        {
            ... : ...
        }
    });
    

    每个主干 View /模型/路由器都是一个“define(...)”模块,并且在main.js中一次调用了“require(“theOneRouter”,...)”。
  • r.js与Uglify / Closure一起用作优化器。我在.net框架中动态选择的./release子文件夹中创建了一个“已编译”main.js。
  • 花了相当长的时间才能使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);
        ....
        ....
    });
    

    这也很棒。测试加载和运行,没有问题。需要照顾一切。

  • 现在,我希望像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上获取示例代码。 希望这可以帮助。

    10-06 05:09
    查看更多