Ceci est un exemple trivial qui illustre le nœud de mon problème:
var innerLib = require('./path/to/innerLib');
function underTest() {
return innerLib.doComplexStuff();
}
module.exports = underTest;
J'essaye d'écrire un test unitaire pour ce code. Comment puis-je simuler l'exigence de la innerLibsans se moquer complètement de la requirefonction?
Donc, c'est moi qui essaie de me moquer du monde requireet de découvrir que cela ne fonctionnera même pas pour faire cela:
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;
}
};
Le problème est que la requirefonction à l'intérieur du underTest.jsfichier n'a en fait pas été simulée. Il pointe toujours vers la requirefonction globale . Il semble donc que je ne puisse simuler la requirefonction que dans le même fichier dans lequel je me moque. Si j'utilise le global requirepour inclure quoi que ce soit, même après avoir remplacé la copie locale, les fichiers requis auront toujours le requireréférence mondiale .
global.require. Les variables écritesmodulepar défaut car les modules ont une portée de module.