这是一个简单的示例,它说明了我的问题的症结所在:
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;
}
};
问题在于文件require
内部的功能underTest.js
实际上尚未被模拟。它仍然指向全局require
功能。因此,看来我只能require
在进行模拟的同一个文件中模拟出该函数。如果我使用全局require
来包含任何内容,即使在覆盖本地副本之后,所需的文件仍将具有全球require
参考。
global.require
。module
默认情况下,变量是在模块作用域内写入的。