এটি একটি তুচ্ছ উদাহরণ যা আমার সমস্যার চূড়ান্ত চিত্র তুলে ধরে:
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
ফাইলটি উপহাস করছি তার মধ্যেই আমি কেবল ফাংশনটি উপহাস করতে পারি I আমি যদি require
স্থানীয় কপিটি ওভাররাইড করার পরেও কোনও কিছু অন্তর্ভুক্ত করতে বিশ্বব্যাপী ব্যবহার করি তবে প্রয়োজনীয় ফাইলগুলি এখনও থাকবে গ্লোবাল require
রেফারেন্স।
global.require
। ভেরিয়েবলগুলিmodule
মডিউলগুলি স্কোপড হওয়ায় ডিফল্টরূপে লেখেন ।