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 innerLib
sans se moquer complètement de la require
fonction?
Donc, c'est moi qui essaie de me moquer du monde require
et 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 require
fonction à l'intérieur du underTest.js
fichier n'a en fait pas été simulée. Il pointe toujours vers la require
fonction globale . Il semble donc que je ne puisse simuler la require
fonction que dans le même fichier dans lequel je me moque. Si j'utilise le global require
pour inclure quoi que ce soit, même après avoir remplacé la copie locale, les fichiers requis auront toujours le require
référence mondiale .
global.require
. Les variables écritesmodule
par défaut car les modules ont une portée de module.