aurelia-bundler
Version:
A library for bundling JavaScript, HTML and CSS for use with SystemJS.
105 lines (85 loc) • 3.04 kB
text/typescript
import * as sysUtil from 'systemjs-builder/lib/utils.js';
import * as fs from 'fs';
import * as chai from 'chai';
import {BundleConfig} from '../lib/models';
import * as sinon from 'sinon';
import * as sinonChi from 'sinon-chai';
import * as bundler from '../lib/bundler';
import * as Builder from 'systemjs-builder';
import * as serializer from '../lib/config-serializer';
let expect = chai.expect;
chai.use(sinonChi);
describe('inject bundle', () => {
let sandbox: sinon.SinonSandbox;
beforeEach(() => {
sandbox = sinon.sandbox.create();
});
afterEach(() => {
sandbox.restore();
});
it('saves bundle config to disk', () => {
let appCfg = { bundles: {} };
let configPath = '';
sandbox.stub(serializer, 'saveAppConfig');
sandbox.stub(serializer, 'getAppConfig').returns(appCfg);
sandbox.stub(sysUtil, 'toFileURL');
let cfg = {
baseURL: '',
options: {
injectionConfigPath: configPath
}
};
let builder = new Builder('.');
sandbox.stub(builder, 'getCanonicalName');
let output = { modules: [], source: '', sourceMap: '' };
let outfile = '';
bundler.injectBundle(builder, output, outfile, cfg as any as BundleConfig);
expect(serializer.saveAppConfig).to.have.been.calledOnce;
});
});
describe('write bundle output', () => {
let sandbox: sinon.SinonSandbox;
beforeEach(() => {
sandbox = sinon.sandbox.create();
});
afterEach(() => {
sandbox.restore();
});
it('writes the bundle file to disk', () => {
sandbox.stub(fs, 'writeFileSync');
sandbox.stub(fs, 'mkdirSync');
bundler.writeOutput({ source: 'sdfsdf', sourceMap: '', modules: [] }, 'outfile.js', true, false);
expect(fs.writeFileSync).to.have.been.calledOnce;
});
it('creates output directory when not exists', () => {
sandbox.stub(fs, 'mkdirSync');
sandbox.stub(fs, 'existsSync').returns(false);
sandbox.stub(fs, 'writeFileSync');
bundler.writeOutput(
{ source: 'bundler source', sourceMap: '', modules: [] },
'outfile', true, false);
expect(fs.mkdirSync).to.have.been.calledOnce;
});
describe('given out file exits', () => {
it('does not overwrite the out file', () => {
sandbox.stub(fs, 'existsSync').returns(true);
sandbox.stub(fs, 'writeFileSync');
expect(() => {
bundler.writeOutput(
{ source: 'bundler source', sourceMap: '', modules: [] },
'outfile.js', false, false);
}).to.throw(/A bundle named/);
expect(fs.writeFileSync).to.not.have.been.calledOnce;
});
it('removes the existing file when `force` option is supplied', () => {
sandbox.stub(fs, 'existsSync').returns(true);
sandbox.spy(fs, 'unlinkSync');
sandbox.stub(fs, 'writeFileSync');
expect(() => {
bundler.writeOutput({ source: 'bundler source', sourceMap: '', modules: [] },
'outfile.js', true, false);
}).to.not.throw(/A bundle named/);
expect(fs.unlinkSync).to.have.been.calledOnce;
});
});
});