UNPKG

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
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); };