Prefer require.cache over native module cache

This patch changes node's module loading behavior so that the
require.cache is always the first place to consider when loading a
module.

The motivation for this change is to help people who are writing
focused tests for their node.js applications, and need a mechanism
to inject test doubles to replace native node.js modules.
This commit is contained in:
Felix Geisendörfer authored and Ryan Dahl committed 2010-12-13 17:58:24 -08:00
1 parent a59483bd1d
commit e27418ca3f
2 files changed
+25 -3

No files matched your search

+3 -3
View File
@@ -238,6 +238,9 @@
var id = resolved[0];
var filename = resolved[1];
var cachedModule = moduleCache[filename];
if (cachedModule) return cachedModule.exports;
// With natives id === request
// We deal with these first
if (natives[id]) {
@@ -253,9 +256,6 @@
return requireNative(id);
}
var cachedModule = moduleCache[filename];
if (cachedModule) return cachedModule.exports;
var module = new Module(id, parent);
moduleCache[filename] = module;
module.load(filename);
+22
View File
@@ -0,0 +1,22 @@
var common = require('../common');
var assert = require('assert');
(function testInjectFakeModule() {
var relativePath = '../fixtures/semicolon';
var absolutePath = require.resolve(relativePath);
var fakeModule = {};
require.cache[absolutePath] = {exports: fakeModule};
assert.strictEqual(require(relativePath), fakeModule);
})();
(function testInjectFakeNativeModule() {
var relativePath = 'fs';
var fakeModule = {};
require.cache[relativePath] = {exports: fakeModule};
assert.strictEqual(require(relativePath), fakeModule);
})();