browserify-testability
Version:
Testing utility for replacing dependencies with mock versions at test-time, without modifying the original source.
45 lines (42 loc) • 1.1 kB
JavaScript
var through;
through = require('through');
module.exports = function() {
var footer, header, headerWritten, inject, injected, regexps, write;
headerWritten = false;
injected = {};
regexps = [/@testability\s*require\s*([\w\/\.\-\~\@]+)/g, /testability\.require\s*\(['"]([\w\/\.\-\~\@]+)['"]/g];
header = function() {
headerWritten = true;
return "\n\n/* Testability Injected Dependencies */\n";
};
footer = function() {
if (headerWritten) {
return "/* End Injected Dependencies */\n";
} else {
return '';
}
};
inject = function(m) {
if (injected[m]) {
return '';
} else {
return injected[m] = "require('" + m + "');\n";
}
};
write = function(buf) {
var ms, r, src, _i, _len;
src = buf.toString();
for (_i = 0, _len = regexps.length; _i < _len; _i++) {
r = regexps[_i];
while (ms = r.exec(src)) {
if (!headerWritten) {
buf += header();
}
buf += inject(ms[1]);
}
}
buf += footer();
return this.emit('data', buf);
};
return through(write);
};