Questo è un esempio banale che illustra il nocciolo del mio problema:
var innerLib = require('./path/to/innerLib');
function underTest() {
return innerLib.doComplexStuff();
}
module.exports = underTest;
Sto cercando di scrivere un test unitario per questo codice. Come posso deridere il requisito per il innerLibsenza deridere completamente la requirefunzione?
Quindi sono io che sto cercando di deridere il globale requiree scoprire che non funzionerà nemmeno per farlo:
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;
}
};
Il problema è che la requirefunzione all'interno del underTest.jsfile non è stata effettivamente derisa. Indica ancora la requirefunzione globale . Quindi sembra che posso solo deridere la requirefunzione all'interno dello stesso file in cui sto eseguendo il derisione. Se uso il globale requireper includere qualcosa, anche dopo aver sovrascritto la copia locale, i file richiesti avranno comunque il requireriferimento globale .
global.require. Le variabili scrivono permoduleimpostazione predefinita poiché i moduli hanno ambito del modulo.