5

機能仕様に問題があります。私は現在、requirejsが悪者であると疑っています。私たちの仕様 (capybara-webkit を使用した Rails) は、すべての JavaScript ファイルが読み込まれる前に実行を開始するようです。Capybara-webkit を使用すると、Webkit で Javascript を評価できます。これを使用して、テスト実行を開始する前にすべてが整っていることを確認したいと思います。

ロードしたモジュールについてrequirejsにクエリを実行できますか? 聴けるイベントはありますか?または、テスト実行時にrequirejsモジュールを挿入して、テストからクエリできるグローバル状態を設定できますか(実際には私の好みのソリューションではありません)?

私はrequirejsの専門家ではなく、JavaScriptをあまり実装していませんが、修正する必要があります;)

4

2 に答える 2

4

「ロード済み」は少しあいまいな言葉です。

モジュールに対してリクエストが行われたことを意味する場合。その指定。モジュール定義の依存関係またはモジュール名を使用した require 呼び出しのいずれかとして、モジュールがどこかで必要になるとすぐに、フォローは true を返します。

require.specified(moduleID);

モジュールが解決されてメモリにロードされると、つまり、モジュールのソースがフェッチされてロードされ、モジュールの定義関数の実行が終了すると、. 以下は true を返します。

require.defined(moduleID);

で調べることもできますrequirejs.s.contexts._.defined。このようにライブラリのデータ構造を検査するのは少しハックな方法ですが、モジュールがロードされているかどうかを確認したい場合に備えて、ブラウザー (firebug) で機能します。私はfirebugとrequirejs 2.1.4で以下をテストしました。

console.log(window.requirejs.s.contexts._.defined['SOME_MODULE']);

このメソッドは、firebug を使用してモジュールの内部コンテンツ (オブジェクト/プロトタイプのプロパティ) を検査するのにも役立ちます。

コードをさらに実行する前に、重要なモジュールがロードされていることを確認する必要がある場合。成功のコールバックを伴う require 呼び出しが機能します。

require([moduleID], function(moduleExport){
    //The module is loaded, proceed to the next step
    //This is also an inherent load check
}, function (error) {
    //The module cant be loaded, handle the exception case
});

次のスニペットは、上記のすべてを示しています

console.log(require.specified('TEST_MODULE'));  //false if the module isn't required yet

require(['TEST_MODULE'], function(TEST_MODULE){
   console.log(require.defined('TEST_MODULE'));  //true
   console.log(require.s.contexts._.defined['TEST_MODULE'] ? true : false);  //true
}, function (error) {
   console.log('TEST_MODULE cant be loaded');
});
console.log(require.defined('TEST_MODULE'));  //false if the module isn't ready yet
console.log(require.specified('TEST_MODULE'));  //true

**グローバルスコープでrequireが他の目的に使用される場合は、requireの代わりにrequirejsを使用できます。

** 上記はすべて、テストしている場所に require/requirejs [global] への参照があることを前提としています。

于 2013-12-28T15:11:49.717 に答える
1

ここで答えを見つけました:require.defined('modules/booking_form/main')そのモジュールがロードされているかどうかを尋ねることができます。カスタムwait_untilを使用すると、すべてが整うまでテストの実行を遅らせることができます。

于 2013-10-17T08:08:37.557 に答える