私はこれに少し立ち往生しています。静的な Web サイトを構築するために、仲介者、カルマ、ジャスミン、babeljs で構成される複雑なスタックがあります。
これは実験であることを考慮して、ES6 をモジュールで使用したいと考えました。仲買人側ではすべて問題ありませんが、カルマとジャスミンをテスト用にセットアップするのに苦労しています.
主な問題はバベル内にあります。バベルを使用するように設定すると、スペック内のすべてのモジュールをmodules: "ignore"
手動で使用する必要があり、これは私が望んでいないことです。ES6 構文を使用したいのですが、 を設定すると、babeljs はすべてのテストを次のように にラップします。System.import
modules: "system"
System.register
System.register(["mymodule"], function (_export) {
"use strict";
var Mymodule;
return {
setters: [function (_mymodule) {
Mymodule = _mymodule["default"];
}],
execute: function () {
console.log("I'm here!!!");
console.log(Mymodule);
describe("Mymodule", function () {
it("has version", function () {
expect(Mymodule.VERSION).toEqual("1.0.0");
});
});
}
};
});
したがって、テストは自動的に実行されません。次に、それを回避するために次のスクリプトを作成しました (これは、すべての仕様が含まれた後に含まれます)。
basePath = "/base/spec/"
modules = []
for own fileName, fileHash of window.__karma__.files
if fileName.indexOf(basePath) is 0
isRunner = fileName.indexOf("spec_runner") >= 0
isRunner ||= fileName.indexOf("spec_helper") >= 0
unless isRunner
moduleName = fileName.replace(basePath, "")
moduleName = moduleName.replace(".js", "")
modules.push(path: fileName, name: moduleName)
mappedModules = {}
baseSpecsPath = "http://localhost:9876"
for module in modules
mappedModules[module.name] = baseSpecsPath + module.path
System.config
baseURL: "http://localhost:4567/javascripts/"
map: mappedModules
for module in modules
System.import(module.name)
このコードは単純です。SystemJS のマップ構成を準備し、アプリ ( http://localhost:4567にあります)からモジュールを正しくロードし、System.register ( http://localhost:9876にあります)にラップされたテストをロードできます。 .
ただし、私のテストは実行されておらず、エラーは報告されていません。さらに悪いことに、 「I'm here!!!」というメッセージが正しくログに記録されます。Mymoduleはコンソールに正しくログインしています。describeの値をログに記録しようとしましたが、これは正しくSuiteオブジェクトです。では、一体なぜ私のテストが実行されないのでしょうか? (it
ブロックは実行されません)
どのような解決策がありますか? セットアップを少し変更して動作させることは問題ありませんが、次のことを維持したいと思います: Middleman、ES6 モジュール、動的モジュールの読み込みなし(すべてのモジュールは最終的に単一のファイルで公開されるか、必須です)たくさんの<script>
タグ付き)、ジャスミン