Il s'agit d'un exemple trivial qui illustre le cœur de mon problème :
var innerLib = require('./path/to/innerLib');
function underTest() {
return innerLib.doComplexStuff();
}
module.exports = underTest;
J'essaie d'écrire un test unitaire pour ce code. Comment puis-je simuler l'exigence pour le test unitaire ? innerLib
sans se moquer de la require
fonction entièrement ?
Donc, c'est moi qui essaye de me moquer du système global. require
et découvrir que ça ne marchera pas même pour faire ça :
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 le require
dans la fonction underTest.js
Le dossier n'a en fait pas été simulé. Il pointe toujours vers le fichier global require
fonction. Il semble donc que je ne puisse que me moquer de la fonction require
dans le même fichier que celui dans lequel j'effectue le mocking. Si j'utilise la fonction globale require
pour inclure quoi que ce soit, même après que j'ai remplacé la copie locale, les fichiers requis auront toujours l'attribut global require
référence.
0 votes
Vous devez écraser
global.require
. Les variables sont écrites dansmodule
par défaut car les modules ont une portée de module.0 votes
@Raynos Comment puis-je faire cela ? global.require est indéfini ? Même si je la remplace par ma propre fonction, les autres fonctions ne l'utiliseront jamais, n'est-ce pas ?