Мы используем RequireJS, Bower и npm в течение некоторого времени. Теперь мы очень впечатлены jspm и SystemJS.Как настроить SystemJS для получения новых экземпляров загрузки модулей в тестовый набор Jasmine
Нам нравится, что они:
- работа с AMD минимизировать боль преобразования нашего существующего кода
- позволяет писать ES2015 модули, используя новые возможности
- имеет подобный конфигурационный файл как RequireJS который они поддерживать.
- позволяют вытащить из узла LIBS и GitHub, которые не должны быть зарегистрированы в беседке
Единственное, что мы можем найти, что запрещая нам сделать переключатель, является то, что нам нужно средство извещать SystemJS, чтобы предоставить нам новые экземпляры необходимых модулей, загружаемых в модуль, содержащий набор тестов Jasmine.
С 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);
И тогда мы называем createRequireContext в тестовом Jasmine Suite:
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?
Хотя я большой поклонник модулей ES6 с ключевыми словами импорта и экспорта, m не очень любитель классов ES6. Я предпочитаю композицию объекта с помощью шаблона раскрывающего модуля. В результате я ищу решение, которое не требует от меня новых объектов повсюду. – cResults