0

jsソースにモジュールを実装するのにrequire.jsは使っていませんが、テスト用に使いたいです。そして問題があります: 生の *.js ファイルを他のモジュールの依存関係として実装できませんでした。出来ますか?

つまり、いくつかの *.js ファイルとモジュールをその後にロードします (テストするため)。

4

1 に答える 1

2

仕組みdefine_

実装とテストの両方にrequire.jsを使用しています。を使用してモジュール関数を実行する前に、任意の JavaScript ファイルを依存関係として読み込むことができますdefine

define(["test/myTest.js", "test/anotherTest.js"], function(test1, test2) {
  // perform your tests
});

requirejsasyncTestsでの使用方法

を使用して、依存関係がモジュール関数内に読み込まれたにコードを読み込むこともできます。QUnitで使用します。これが私のコードの例です。require

まず、QUnit テスト ランナーがデフォルトで停止していることを確認します (これは他のテスト フレームワークでも同様です)。このようにして、テストをいつ実行するか (つまり、関連するコードをロードした後) を定義できます。

QUnit.config.autostart = false

次に、テストをモジュールとして定義します。モジュールは依存関係をロードし、テストを定義してから、テスト対象のコードをロードします。これは、コードが自己実行型であり、事前にロードできない場合にのみ必要です (その場合、define を使用して実行することができます)。ライブラリを使用した例を次に示しChaplinます (CoffeeScript で記述)。

define(['chaplin'], function(chaplin) {
  asyncTest("publish startup complete event", function() {
    chaplin.mediator.subscribe("startup~complete", function() {
      ok(true, "startup~complete event fired");
    });
    return requirejs(['modules/startup/startup'], function() {
      start();
    });
  });
});

重要な部分は最後のrequirejs呼び出しです。テストが定義された後、テストするコードをロードします。

依存関係を動的にロードする

config編集: コメントへの応答構成データを含むというモジュールが存在すると仮定します。フォーマットも想定していますので、フォーマットが異なる場合は多少の変更を加える場合があります。ただし、原則は当てはまります。

define(["config"], function(config) {
  // assuming config.modules is an array of all development modules,
  // config.devPath is the base bath to development modules,
  requirejs(
    config.modules.map(function(module){
      return config.devPath + module
    })
  , function() {
    // all modules loaded, now go on
    // however, no reference to modules left, so need to work with `arguments` array
  });
});

ただし、コールバック関数でモジュールへの参照が失われることを知っておく必要があります。

于 2012-12-03T12:35:28.720 に答える