이것은 내 문제의 요점을 보여주는 사소한 예입니다.
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
모듈은 모듈 범위이므로 변수 는 기본적으로 씁니다 .