This repository has been archived by the owner. It is now read-only.
Permalink
Browse files

Add broken test for require cache working

require is caching the compiled code but still stating the filenames.
https://groups.google.com/d/topic/nodejs-dev/QGGlrvLDHVs/discussion
  • Loading branch information...
1 parent d9087c1 commit f35773ad0767232aafaa9dfe9f788ca55b0a6138 @ry ry committed Jan 16, 2011
Showing with 44 additions and 0 deletions.
  1. +44 −0 test/simple/test-require-cache-without-stat.js
@@ -0,0 +1,44 @@
+// We've experienced a regression where the module loader stats a bunch of
+// directories on require() even if it's been called before. The require()
+// should caching the request.
+var common = require('../common');
+var fs = require('fs');
+var assert = require('assert');
+
+var counter = 0;
+
+// Switch out the two stat implementations so that they increase a counter
+// each time they are called.
+
+var _statSync = fs.statSync;
+var _stat = fs.stat;
+
+fs.statSync = function() {
+ counter++;
+ return _statSync.apply(this, arguments);
+};
+
+fs.stat = function() {
+ counter++;
+ return _stat.apply(this, arguments);
+};
+
+// Load the module a.js once. It should become cached.
+
+var m = common.fixturesDir + '/a.js';
@kof

kof Jan 16, 2011

This should not work, because of ".js"

@tj

tj Jan 16, 2011

Yeah it should

+require(m);
+
+console.log("counterBefore = %d", counter);
+var counterBefore = counter;
+
+// Now load the module a bunch of times.
+// stat should not be called.
+for (var i = 0; i < 100; i++) {
+ require(m);
+}
+
+console.log("counterAfter = %d", counter);
+var counterAfter = counter;
+
+assert.equal(counterBefore, counterAfter);
+

0 comments on commit f35773a

Please sign in to comment.