私たちはかなり長い間、RequireJS、Bower、および npm を使用してきました。今では、jspm と SystemJS に非常に感銘を受けています。
私たちは彼らが好きです:
- AMD と連携して、既存のコードを変換する手間を最小限に抑えます
- 新しい機能を利用して ES2015 モジュールを作成できるようにする
- 彼らが維持しているRequireJSと同様の構成ファイルがあります。
- bower に登録する必要のない Node と GitHub からライブラリをプルできるようにする
切り替えを妨げている唯一の理由は、Jasmine テスト スイートを含むモジュールにロードされる必要なモジュールの新しいインスタンスを SystemJS に提供するように指示する手段が必要なことです。
RequireJS では、createRequireContext をウィンドウに追加することでこれを行います。
(function (window) {
var contextId = 0;
window.createRequireContext = function () {
var config = $.extend(true, window.globalRequireConfig, {
baseUrl: '/base/src',
context: 'new-context' + contextId++,
paths: {
'testData': '../test/data',
'testFiles': '../test/testFiles'
}
}),
context = requirejs.config(config);
return context.apply(this, arguments);
};
})(window);
そして、Jasmine テスト スイート内で createRequireContext を呼び出します。
define(function () {
var simpleObject;
describe('new context for each test', function () {
beforeEach(function (done) {
createRequireContext(['testFiles/SimpleObjectModule'], function (newSimpleObject) {
simpleObject = newSimpleObject;
done();
});
});
describe("createRequireContext", function () {
it("retrieves a module with a new context and change a variable", function () {
expect(simpleObject.foo).toBe('bar');
simpleObject.foo = 'Old Data';
expect(simpleObject.foo).toBe('Old Data');
});
it("retrieves a module with a new context and has original value", function () {
expect(simpleObject.foo).toBe('bar');
});
});
});
describe('new context for each test suite', function () {
beforeAll(function (done) {
createRequireContext(['testFiles/SimpleObjectModule'], function (newSimpleObject) {
simpleObject = newSimpleObject;
done();
});
});
describe("createRequireContext", function () {
it("retrieves a module with a new context and change a variable", function () {
expect(simpleObject.foo).toBe('bar');
simpleObject.foo = 'New Data';
expect(simpleObject.foo).toBe('New Data');
});
it("retrieves a module with a new context and has changed value", function () {
expect(simpleObject.foo).toBe('New Data');
});
});
});
});
beforeEach で新しいコンテキストを作成すると、すべてのテストに必要なモジュールが分離されます。beforeAll で新しいコンテキストを作成すると、必要なモジュールが他のテスト スイートで使用されないように分離されます。
SystemJS と jspm でこれを行う方法はありますか?