如何单元测试一个需要其他模块.js模块,以及如何模拟全局需要函数?
2022-08-30 02:04:03
						这是一个微不足道的例子,说明了我问题的症结所在:
var innerLib = require('./path/to/innerLib');
function underTest() {
    return innerLib.doComplexStuff();
}
module.exports = underTest;
我正在尝试为此代码编写单元测试。如何在不完全模拟函数的情况下模拟出的要求?innerLibrequire
所以这是我试图嘲笑全球,并发现即使这样做也行不通: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;
    }
};
问题是文件内的函数实际上没有被模拟出来。它仍然指向全局函数。因此,似乎我只能在我进行模拟的同一文件中模拟出函数。如果我使用全局包含任何内容,即使我覆盖了本地副本,所需的文件仍将具有全局引用。requireunderTest.jsrequirerequirerequirerequire