lfr-amd-loader
Version:
AMD Loader with support for combo URL and conditional loading
164 lines (127 loc) • 4.36 kB
JavaScript
;
global.__CONFIG__ = {
url: __dirname + '/fixture/modules',
basePath: '/',
modules: {
module1: {
dependencies: ['module2', 'module3']
},
module2: {
dependencies: []
},
module3: {
dependencies: []
},
module5: {
dependencies: ['module6', 'module7', 'exports']
},
module6: {
dependencies: ['module7', 'exports']
},
module7: {
dependencies: ['exports']
},
moduleMissing: {
dependencies: []
},
moduleCyclic1: {
dependencies: ['moduleCyclic2']
},
moduleCyclic2: {
dependencies: ['moduleCyclic1']
},
}
};
require('../umd/event-emitter.js');
require('../umd/script-loader.js');
var assert = require('assert');
var sinon = require('sinon');
require('./fixture/common.js');
require('./fixture/script.js');
describe('Loader', function () {
it('should define a module without dependencies (except exports)', function (done) {
var impl = sinon.spy(function (exports) {
exports.pejJung = {};
});
Loader.define('pej-jung', ['exports'], impl);
setTimeout(function () {
assert(impl.notCalled);
var modules = Loader.getModules();
var module = modules['pej-jung'];
assert.ok(module);
assert.strictEqual('pej-jung', module.name);
assert.strictEqual(module.pendingImplementation, impl);
assert.strictEqual(module.requested, undefined);
done();
}, 50);
});
it('should load already defined (manually) modules', function (done) {
var failure = sinon.stub();
var success = sinon.stub();
Loader.require(['aui-123', 'pej-jung'], success, failure);
setTimeout(function () {
assert.ok(failure.notCalled);
assert.ok(success.calledOnce);
done();
}, 50);
});
it('should load modules with misspelled names', function (done) {
var failure = sinon.stub();
var success = sinon.stub();
Loader.require(['aui-1', 'aui2'], success, failure);
setTimeout(function () {
assert.ok(failure.notCalled);
assert.ok(success.calledOnce);
done();
}, 50);
});
it('should load previously registered modules', function (done) {
var failure = sinon.stub();
var success = sinon.stub();
Loader.require('module1', success, failure);
setTimeout(function () {
assert.ok(failure.notCalled);
assert.ok(success.calledOnce);
done();
}, 50);
});
it('should fail on registered but not existing file', function (done) {
var failure = sinon.stub();
var success = sinon.stub();
Loader.require('moduleMissing', success, failure);
setTimeout(function () {
assert.ok(failure.calledOnce);
assert.ok(success.notCalled);
done();
}, 50);
});
it('should fail if dependencies cannot be resolved', function (done) {
var failure = sinon.stub();
var success = sinon.stub();
Loader.require('moduleCyclic1', 'moduleCyclic1', success, failure);
setTimeout(function () {
assert.ok(failure.calledOnce);
assert.ok(success.notCalled);
done();
}, 50);
});
it('should succeed when requiring modules multiple times', function (done) {
var failure = sinon.stub();
var success = sinon.stub();
Loader.require(['module5'], success, failure);
Loader.require(['module6'], success, failure);
Loader.require(['module7'], success, failure);
setTimeout(function () {
assert.ok(failure.notCalled);
assert.ok(success.calledThrice);
done();
}, 50);
});
it('should ignore success and callback if not functions', function () {
Loader.require(['module1'], null, null);
});
it('should return conditional modules', function () {
var conditionalModules = Loader.getConditionalModules();
assert.deepEqual([], conditionalModules);
});
});