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 innerLib
sem zombar require
totalmente da função?
Então, sou eu que estou tentando zombar do global require
e 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 require
função dentro do underTest.js
arquivo não foi realmente zombada. Ainda aponta para a require
função global . Parece que só posso zombar da require
função no mesmo arquivo em que estou zombando. Se eu usar o global require
para incluir qualquer coisa, mesmo depois de substituir a cópia local, os arquivos solicitados ainda terão o require
referência global .
global.require
. As variáveis gravammodule
por padrão, pois os módulos têm escopo definido no módulo.