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 innerLib
sin burlar completamente la require
función?
Así que este soy yo tratando de burlarme de lo global require
y 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 require
función dentro del underTest.js
archivo en realidad no se ha burlado. Todavía apunta a la require
función global . Por lo tanto, parece que solo puedo require
simular la función dentro del mismo archivo en el que estoy haciendo el simulacro . Si uso el global require
para incluir algo, incluso después de haber anulado la copia local, los archivos requeridos seguirán teniendo require
referencia global
global.require
. Las variables escribenmodule
de forma predeterminada ya que los módulos tienen un alcance de módulo.