这是一个简单的例子,说明了我的问题的关键:
var innerLib = require('./path/to/innerLib');
function underTest() {
return innerLib.doComplexStuff();
}
module.exports = underTest;
我正在尝试编写这段代码的单元测试。如何在不完全模拟 require
函数的情况下模拟 innerLib
的要求?因此,我试图模拟全局的
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
引用。
global.require
。变量默认写入到module
中,因为模块是模块作用域的。 - Raynos