Home Reference Source Test

test/Module.test.js

import Module from '../source/Module';


/**
 * @test {Module}
 */
describe('Module parser',  () => {

    var module;

    before(()  =>  (module = new Module('./index', './test/example/')).load());

    /**
     * @test {Module#parseAMD}
     */
    it('Parse AMD',  () => {

        module.parseAMD().should.be.eql( {'./a': 'A'} );

        (module + '').should.be.equal(`/* AMD module */

    var C = require('./c');

    return  {a: A, c: C, test: require('test')};
`);
    });

    /**
     * @test {Module#parseCJS}
     */
    it('Parse CommonJS',  ()  =>  module.parseCJS().should.be.eql({'./c': '_c'}));

    /**
     * @test {Module#parse}
     */
    it('Parse all',  () => module.parse().should.be.equal(`

function (A, require, exports, module) {/* AMD module */

    var C = require('./c');

    return  {a: A, c: C, test: require('test')};
}`.trim())
    );

    /**
     * @test {Module#dependencyPath}
     */
    it(
        'Get paths of the dependency',
        ()  =>  module.dependencyPath.should.be.eql(['./a', './c'])
    );

    /**
     * @test {Module#load}
     */
    it(
        'Load ES 6 module',
        ()  =>  (new Module('./b', './test/example/libs/')).load().should.be.eql(`
Object.defineProperty(exports, '__esModule', {
    value: true
});
exports.default = void 0;

require('../c');

var _default = 'This is B';
exports.default = _default;`.trim())
    );

    /**
     * @test {Module#mapName}
     */
    it('Replace a dependency',  () => {

        module = new Module(
            './index',  './test/example/',  true,  {jquery: /^test$/}
        );

        module.parse().should.be.equal(`

function (A, require, exports, module) {/* AMD module */

    var C = require('./c');

    return  {a: A, c: C, test: require('jquery')};
}`.trim());

        module.dependencyPath.should.be.containEql('jquery');
    });
});