Це тривіальний приклад, який ілюструє суть моєї проблеми:
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
за замовчуванням, оскільки модулі мають масштаб.