【问题标题】:How to use requireJs with envjs如何在 envjs 中使用 requireJs
【发布时间】:2012-06-27 18:16:35
【问题描述】:

有人能给我一些关于如何将 bumblebeerequireJs 结合起来的提示吗? BumbleBee 结合了 Rhino、JSpec、Envjs 和 Ant 来提供“开箱即用”的 JavaScript 测试工具包。 它对我们非常有用,因为它可以在 ubuntu-box 上的终端中进行简单的独立运行。

我们的整个 JS 代码基于 requireJs-Modules,而且看起来,如果我们从 envjs/bumblebee/rhine 的规范文件中需要所需的模块,则不会加载所需的模块(可能是什么类型的东西对此负责),可能是由于requireJs中的异步事实。

我做了什么:

  1. 我按照上面提到的github-site 上的说明设置了 BumbleBee 环境
  2. “ant examples”命令运行良好,两个测试用例都运行成功
  3. 我将 require-jquery.js 添加到依赖项(替换最初设置的 jquery.js)(这种方式遵循教程 "How to use jQuery with requireJS" - 它在我们的整个 Web 应用程序中成功运行(并且工作正常)
  4. 我写了一些requireJS-Modules,在spec-files中require了,很快检测到他们不会被加载(spec-files会被加载,require-method会被执行,但不是ins内容)
  5. 然后我使用这些setup-hints 将requireJS 与Node 结合起来(这里也提到了rhino)

这些文件可能很有趣:

lib/bumblebee.js(我认为它是整个测试套件的入口点):

load('dependencies/js/env.rhino.1.2.js');
window.location="examples/fixture/fixture.html";

load('dependencies/js/jspec/jspec.js');
load('dependencies/js/require-jquery.js');

var runSpec = function(spec) {
    JSpec.exec(spec);
};


define(function(require) {
    console.log("A1");
    var dep = require('dependency');

    //The value returned from the function is
    //used as the module export visible to Node.
    return function () {};
});

require(['dependency'], function(d){
    console.log("A2");
} );


console.log("A3");

var specs = arguments;


jQuery.each(specs, function(index, spec) {
    runSpec(spec);
});

JSpec
  .run({ reporter: JSpec.reporters.Terminal, fixturePath: 'spec/fixtures' })
  .report();

只有“A3”会打印到控制台,这里永远不会执行基于需求的代码。

然后我将define/require-parts 放入示例文件中的规范文件中,并且还检测到,我不能将模块与require 一起使用,因为它们不会被加载并且不会被加载。

考虑来自 BambleBee-Examples 的原始规范文件:

describe('Greeter', function() {

    load('examples/src/greeter.js');

    it('greets people', function() {
      expect(example.greeter().greet()).to(eql, 'Hello!');
    });
});

当我现在使用 requireJS 特定的模块时,它们也不会被加载:

describe('Greeter', function() {

    load('examples/src/greeter.js');

    require(['dependency'], function(d){
        // do something with D...
        console.log("This will **NEVER** be printed");
    } );

    console.log("This **WILL** be printed");
    it('greets people', function() {
      expect(example.greeter().greet()).to(eql, 'Hello!');
    });
});

问题

有没有办法将 Envjs 与 requireJS 结合起来,或者 EnvJS 对我们来说是错误的测试工具? 非常感谢任何提示!

【问题讨论】:

    标签: javascript unit-testing requirejs envjs


    【解决方案1】:

    这是一个已知问题。您可以参考https://github.com/envjs/env-js/issues/7 来详细讨论 envjs 和 requirejs。 我的解决方案是使用 Phantomjs 通过 CI 运行 jasmine 规范,您可以在 https://github.com/xiaocong/xiaocong.github.com/tree/master/examples/coffee-bbb-amd-backbone-rest-contacts 找到示例项目

    【讨论】:

      猜你喜欢
      • 2012-11-05
      • 2015-11-09
      • 1970-01-01
      • 1970-01-01
      • 2012-05-16
      • 1970-01-01
      • 2013-10-10
      • 1970-01-01
      • 2011-09-04
      相关资源
      最近更新 更多