Ini adalah contoh sepele yang menggambarkan inti permasalahan saya:
var innerLib = require('./path/to/innerLib');
function underTest() {
return innerLib.doComplexStuff();
}
module.exports = underTest;
Saya mencoba menulis unit test untuk kode ini. Bagaimana saya bisa mengejek persyaratan untuk innerLibtanpa mengolok-olok requirefungsi sepenuhnya?
Jadi ini saya mencoba untuk mengejek global requiredan mengetahui bahwa itu tidak akan berhasil bahkan untuk melakukan itu:
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;
}
};
Masalahnya adalah bahwa requirefungsi di dalam underTest.jsfile sebenarnya belum dipermainkan. Itu masih menunjuk ke requirefungsi global . Jadi sepertinya saya hanya bisa mengejek requirefungsi dalam file yang sama dengan yang saya lakukan mengejek. Jika saya menggunakan global requireuntuk memasukkan apa pun, bahkan setelah saya mengganti salinan lokal, file yang diminta masih memiliki requirereferensi global .
global.require. Variabel menulismodulesecara default karena modul memiliki cakupan modul.