compile-hook
Version:
a tiny, dummy way to add a hook to the Module.prototype._compile method
76 lines (52 loc) • 1.99 kB
JavaScript
;
const Code = require('code');
const Lab = require('lab');
const lab = exports.lab = Lab.script();
const describe = lab.describe;
const it = lab.it;
const expect = Code.expect;
const beforeEach = lab.beforeEach;
const CompileHook = require('../index');
// Remove cache in require for tests
beforeEach((done) => {
const modules = Object.keys(require.cache);
modules.forEach((moduleName) => {
if (moduleName.endsWith('testModules/module1.js') || moduleName.endsWith('testModules/module2.js')) {
delete require.cache[moduleName];
}
});
done();
});
describe('Place and remove hook', () => {
it('should place the hook, then require module1 then remove hook and require module2', { plan: 10 }, (testDone) => {
const journal = [];
CompileHook.placeHook((content, filename, done) => {
journal.push(filename);
done();
});
const Module1 = require('./testModules/module1');
expect(Module1.action).to.exist();
expect(Module1.action).to.be.a.instanceof(Function);
expect(journal).to.have.length(1);
CompileHook.removeHook();
const Module2 = require('./testModules/module2');
expect(Module2.eleven).to.exist();
expect(Module2.eleven).to.equal(11);
expect(Module2.constant).to.exist();
expect(Module2.constant).to.equal(1492);
expect(Module2.number).to.exist();
expect(Module2.number).to.equal(1515);
expect(journal).to.have.length(1);
testDone();
});
});
describe('Place hook that changes code on the fly', () => {
it('should change the value of module2.constant', { plan: 1 }, (testDone) => {
CompileHook.placeHook((content, filename, done) => {
done(content.replace(1492, 622));
});
const Module2 = require('./testModules/module2');
expect(Module2.constant).to.equal(622);
testDone();
});
});