jsソースにモジュールを実装するのにrequire.jsは使っていませんが、テスト用に使いたいです。そして問題があります: 生の *.js ファイルを他のモジュールの依存関係として実装できませんでした。出来ますか?
つまり、いくつかの *.js ファイルとモジュールをその後にロードします (テストするため)。
jsソースにモジュールを実装するのにrequire.jsは使っていませんが、テスト用に使いたいです。そして問題があります: 生の *.js ファイルを他のモジュールの依存関係として実装できませんでした。出来ますか?
つまり、いくつかの *.js ファイルとモジュールをその後にロードします (テストするため)。
define
_実装とテストの両方にrequire.jsを使用しています。を使用してモジュール関数を実行する前に、任意の JavaScript ファイルを依存関係として読み込むことができますdefine
。
define(["test/myTest.js", "test/anotherTest.js"], function(test1, test2) {
// perform your tests
});
requirejs
asyncTestsでの使用方法を使用して、依存関係がモジュール関数内に読み込まれた後にコードを読み込むこともできます。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
});
});
ただし、コールバック関数でモジュールへの参照が失われることを知っておく必要があります。