7

哇,真是一团糟。这就是场景。

  • 骨干驱动的 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 夹具进行真正的加载)它们不会被检测到代码覆盖率。

有没有人让这个特定的组合起作用?可能是我要求太高了……

4

4 回答 4

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

于 2012-06-30T01:10:22.357 回答
2

我无法让它工作,最终使用 PhantomJS 来运行我的 jasmine 测试。http://phantomjs.org/

于 2012-05-26T12:00:05.530 回答
2

您是否尝试过命名被测模块并在测试中使用 require 而不是 define ?

https://github.com/podefr/jasmine-reqjs-jstd

编辑:

我刚刚发布了一个开源工具包,希望它能帮助其他人,就像它帮助我一样。它是许多开源工具的组合,它为您提供了一个开箱即用的 requirejs 主干应用程序。

它提供单个命令来运行:dev web server、jasmine 单浏览器测试运行器、jasmine js-test-driver 多浏览器测试运行器,以及 JavaScript 和 CSS 的连接/缩小。它还输出应用程序的未缩小版本以进行生产调试,预编译您的车把模板,并支持国际化。无需设置。它只是工作。

它还支持正在测试的未命名模块。

http://github.com/davidjnelson/agilejs

于 2012-06-27T22:46:18.493 回答
0

查看这个 repo ( Bredele appolo ),它是一个在加载了 require.js 和 JsTestDriver的匿名模块上运行 Jasmine BDD 规范的环境。

如果您正在开发非匿名模块,我还建议使用podefr解决方案。

奥利维尔

于 2013-01-20T18:10:58.423 回答