Dies ist ein triviales Beispiel, das den Kern meines Problems veranschaulicht:
var innerLib = require('./path/to/innerLib');
function underTest() {
return innerLib.doComplexStuff();
}
module.exports = underTest;
Ich versuche, einen Komponententest für diesen Code zu schreiben. Wie kann ich die Anforderung für die innerLibverspotten, ohne die requireFunktion vollständig zu verspotten ?
Ich versuche also, das Globale zu verspotten requireund herauszufinden, dass es nicht einmal funktioniert, das zu tun:
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;
}
};
Das Problem ist, dass die requireFunktion in der underTest.jsDatei tatsächlich nicht verspottet wurde. Es zeigt immer noch auf die globale requireFunktion. Es scheint also, dass ich die requireFunktion nur in derselben Datei verspotten kann, in der ich mich verspotte. Wenn ich die globale Datei verwende require, um etwas einzuschließen, haben die erforderlichen Dateien auch nach dem Überschreiben der lokalen Kopie noch die globale requireReferenz.
global.require. Variablen, auf diemodulestandardmäßig geschrieben wird, da Module einen Modulbereich haben.