9

RequireJS を使用しているアプリケーションのテストを書いています。アプリケーションがどのように動作するかにより、 を呼び出すことによっていくつかのクラスを取得することが期待されますrequire。したがって、テスト用にいくつかのダミー クラスがありますが、このテストのためだけにそれらを個別のファイルに入れる必要はありません。define()次のように、テストファイル内で手動でそれらだけを使用することをお勧めします。

define('test/foo', function () {
    return "foo";
});

define('test/bar', function () {
    return "bar";
});

test("...", function () {
    MyApp.load("test/foo"); // <-- internally, it calls require('test/foo')
});

ここでの問題は、スクリプトのオンロード イベントが発生するまで、これらのモジュールの評価が遅れることです。

1600 行目あたりの require.jsから:

//Always save off evaluating the def call until the script onload handler.
//This allows multiple modules to be in a file without prematurely
//tracing dependencies, and allows for anonymous module support,
//where the module name is not known until the script onload event
//occurs. If no context, use the global queue, and get it processed
//in the onscript load callback.
(context ? context.defQueue : globalDefQueue).push([name, deps, callback]);

キューを手動でトリガーして評価する方法はありますか?

4

2 に答える 2

1

これまでに見つけた最良の方法は、モジュールを非同期的に要求することです。

define("test/foo", function () { ... });
define("test/bar", function () { ... });

require(["test/foo"], function () {
    var foo = require('test/foo'),
        bar = require('test/bar');
    // continue with the tests..
});
于 2012-01-16T18:20:08.447 に答える
0

モジュール定義は、ファイルごとに 1 つに制限する必要があります (こちらを参照)。単一のファイルで複数のモジュールを定義すると、スクリプトのロード イベントに依存して、依存関係の解決中に準備ができているかどうかを判断する内部ローディング メカニズムが壊れると思います。

テスト用であっても、これらの定義を複数のファイルに分割することをお勧めします。

それが役立つことを願っています! 乾杯。

于 2012-01-16T14:19:10.987 に答える