这是一个简单的例子,说明了我的问题的症结所在:
var innerLib = require('./path/to/innerLib');
function underTest() {
return innerLib.doComplexStuff();
}
module.exports = underTest;
我正在尝试为这段代码编写一个单元测试。如何模拟出 innerLib
的需求而不完全模拟出 require
的功能?
所以这是我试图模仿全球 require
,结果发现它甚至不会工作:
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;
}
};
问题是 underTest.js
文件中的 require
函数实际上没有被模拟出来。它仍然指向全局 require
函数。所以看起来我只能在同一个文件中模仿 require
函数。如果我使用全局 require
来包含任何内容,即使在重写了本地副本之后,所需的文件仍然具有全局 require
引用。