This is a trivial example that illustrates the crux of my problem:
var innerLib = require('./path/to/innerLib');
function underTest() {
return innerLib.doComplexStuff();
}
module.exports = underTest;
I am trying to write a unit test for this code. How can I mock out the requirement for the innerLib
without mocking out the require
function entirely?
So this is me trying to mock out the global require
and finding out that it won’t work even to do that:
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;
}
};
The problem is that the require
function inside the underTest.js
file has actually not been mocked out. It still points to the global require
function. So it seems that I can only mock out the require
function within the same file I’m doing the mocking in. If I use the global require
to include anything, even after I’ve overridden the local copy, the files being required will still have the global require
reference.
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…