Este é um exemplo trivial que ilustra o cerne do meu problema:
var innerLib = require('./path/to/innerLib');
function underTest() {
return innerLib.doComplexStuff();
}
module.exports = underTest;
Estou tentando escrever um teste de unidade para este código. Como posso zombar do requisito do innerLibsem zombar requiretotalmente da função?
Então, sou eu que estou tentando zombar do global requiree descobrindo que ele não funcionará nem para fazer isso:
var path = require('path'),
vm = require('vm'),
fs = require('fs'),
indexPath = path.join(__dirname, './underTest');
var globalRequire = require;
require = function(name) {
console.log('require: ' + name);
switch(name) {
case 'connect':
case indexPath:
return globalRequire(name);
break;
}
};
O problema é que a requirefunção dentro do underTest.jsarquivo não foi realmente zombada. Ainda aponta para a requirefunção global . Parece que só posso zombar da requirefunção no mesmo arquivo em que estou zombando. Se eu usar o global requirepara incluir qualquer coisa, mesmo depois de substituir a cópia local, os arquivos solicitados ainda terão o requirereferência global .
global.require. As variáveis gravammodulepor padrão, pois os módulos têm escopo definido no módulo.