Este es un ejemplo trivial que ilustra el quid de mi problema:
var innerLib = require('./path/to/innerLib');
function underTest() {
return innerLib.doComplexStuff();
}
module.exports = underTest;
Estoy tratando de escribir una prueba unitaria para este código. ¿Cómo puedo burlarme del requisito para el innerLibsin burlar completamente la requirefunción?
Así que este soy yo tratando de burlarme de lo global requirey descubriendo que no funcionará incluso para hacer eso:
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;
}
};
El problema es que la requirefunción dentro del underTest.jsarchivo en realidad no se ha burlado. Todavía apunta a la requirefunción global . Por lo tanto, parece que solo puedo requiresimular la función dentro del mismo archivo en el que estoy haciendo el simulacro . Si uso el global requirepara incluir algo, incluso después de haber anulado la copia local, los archivos requeridos seguirán teniendo requirereferencia global
global.require. Las variables escribenmodulede forma predeterminada ya que los módulos tienen un alcance de módulo.