0

誰かがbumblebeerequireJsを組み合わせる方法についてのヒントを教えてもらえますか? BumbleBee は、Rhino、JSpec、Envjs、および Ant を組み合わせて、「すぐに使える」JavaScript テスト ツールキットを提供します。ubuntu-boxの端末で簡単なスタンドアロン実行が可能になるため、私たちにとって非常に便利です。

requireJs-Modules に基づく私たちの JS コード全体は、必要なモジュールが envjs/bumblebee/rhine の仕様ファイルから要求された場合にロードされないようです(どのようなものが原因である可能性がありますか)。これは、requireJs の非同期性が原因です。

私がやったこと:

  1. 上記のgithub サイトの指示に従って BumbleBee-Environment をセットアップしました
  2. コマンド「ant examples」は正常に機能し、両方のテストケースが正常に実行されています
  3. 依存関係にrequire-jquery.jsを追加しました(最初にセットアップされたjquery.jsを置き換えます)(この方法は、チュートリアル「requireJSでjQueryを使用する方法」に従います-Web アプリケーション全体で正常に実行されます(そして正常に動作します))
  4. 私はいくつかのrequireJS-Modulesを書き、スペックファイルでそれらを必要とし、それらがロードされないことを非常に迅速に検出しました(スペックファイルがロードされ、requireメソッドが実行されますが、コンテンツは実行されません)
  5. 次に、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」のみがコンソールに出力され、require ベースのコードがここで実行されることはありません。

次に、define/require-parts を example-files から spec-files に入れ、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 は私たちにとって間違ったテスト ツールですか? ヒントをありがとう!

4

1 に答える 1

1

これは既知の問題です。https://github.com/envjs/env-js/issues/7を参照して、envjs と requirejs の間の詳細な議論を得ることができます。私の解決策は、Phantomjs を使用して CI でジャスミン仕様を実行することです。サンプル プロジェクトはhttps://github.com/xiaocong/xiaocong.github.com/tree/master/examples/coffee-bbb-amd-backboneにあります。 -残りの連絡先

于 2012-08-08T02:52:03.747 に答える