Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/twbs/rewire.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorJohannes <johannes.ewald@roomieplanet.de>2012-06-22 20:30:43 +0400
committerJohannes <johannes.ewald@roomieplanet.de>2012-06-22 20:30:43 +0400
commitff40e6a78fe52e2041b39763488df95d4eb72602 (patch)
tree5d83965fde6b34feae9e8e89a550765da695f946 /test
parent0c860734dc28a679d9214ee9c5b5ff95e00eed55 (diff)
all tests running
Diffstat (limited to 'test')
-rw-r--r--test/browser/index.html9
-rw-r--r--test/browserify.browserifyRewire.test.js126
-rw-r--r--test/browserify.getRewireRequires.test.js19
-rw-r--r--test/rewire.test.js167
-rw-r--r--test/testHelpers/createFakePackageJSON.js11
-rw-r--r--test/testHelpers/removeFakePackageJSON.js9
-rw-r--r--test/testModules/moduleA.js5
-rw-r--r--test/testModules/moduleB.js30
-rw-r--r--test/testModules/sharedTestCases.js175
9 files changed, 365 insertions, 186 deletions
diff --git a/test/browser/index.html b/test/browser/index.html
new file mode 100644
index 0000000..46d63d9
--- /dev/null
+++ b/test/browser/index.html
@@ -0,0 +1,9 @@
+<!doctype html>
+<head>
+ <link rel="stylesheet" href="../../node_modules/mocha/mocha.css" />
+ <script src="../../node_modules/mocha/mocha.js" type="text/javascript"></script>
+ <script src="browseroutput.js" type="text/javascript"></script>
+</head>
+<body>
+ <div id="mocha"></div>
+</body> \ No newline at end of file
diff --git a/test/browserify.browserifyRewire.test.js b/test/browserify.browserifyRewire.test.js
new file mode 100644
index 0000000..cf8dbd9
--- /dev/null
+++ b/test/browserify.browserifyRewire.test.js
@@ -0,0 +1,126 @@
+var vm = require("vm"),
+ fs = require("fs"),
+ pathUtil = require("path"),
+ expect = require("expect.js"),
+ browserify = require("browserify"),
+ browserifyMiddleware = require("../lib/index.js").browserify;
+
+/**
+ * Executes the source in a context that pretends to be a browser
+ * @param {!String} src
+ */
+function runInFakeBrowserContext(src, filename) {
+ vm.runInNewContext(src, {
+ window: {
+ console: console,
+ describe: describe,
+ it: it,
+ before: before,
+ after: after,
+ beforeEach: beforeEach,
+ afterEach: afterEach,
+ setTimeout: setTimeout
+ },
+ console: console
+ }, filename);
+}
+
+describe("browserifyRewire", function () {
+ before(require("./testHelpers/createFakePackageJSON.js"));
+ after(require("./testHelpers/removeFakePackageJSON.js"));
+ it("should attach __set__ and __get__ to the exports-obj", function (done) {
+ var context,
+ exportsObj = {},
+ returnedObj,
+ browserifyRewire;
+
+ // Register with fake objects
+ // Using null for objects that are not involved in this particular test
+ function moduleA() {
+ "use strict";
+
+ browserifyRewire.register("/a.js", null, null);
+ returnedObj = browserifyRewire("/a.js", "/b.js");
+ }
+
+ function moduleB() {
+ "use strict";
+ browserifyRewire.register("/b.js", setter, getter);
+
+ return exportsObj;
+ }
+
+ function fakeResolve() {
+ return "/b.js";
+ }
+
+ function fakeRequire(requirePath) {
+ if (requirePath === "path") {
+ return pathUtil;
+ } else {
+ return moduleB();
+ }
+ }
+ fakeRequire.resolve = fakeResolve;
+
+ function setter() {}
+ function getter() {}
+
+ context = {
+ require: fakeRequire,
+ module: {},
+ console: console,
+ window: {
+ browserifyRequire: {
+ modules: {
+ "/b.js": {
+ _cached : {}
+ }
+ }
+ }
+ }
+ };
+
+ fs.readFile(pathUtil.resolve(__dirname, "../lib/browserify/browserifyRewire.js"), "utf8", function onBrowserifyRewireRead(err, src) {
+ vm.runInNewContext(src, context);
+ browserifyRewire = context.module.exports;
+
+ moduleA();
+
+ expect(returnedObj).not.to.be(exportsObj);
+ expect(returnedObj.__set__).to.be(setter);
+ expect(returnedObj.__get__).to.be(getter);
+ expect(context.window.browserifyRequire.modules["/b.js"]._cached).to.be(returnedObj);
+
+ done();
+ });
+ });
+ it("should run all sharedTestCases without exception", function (done) {
+ var b = browserify(),
+ browserOutput = __dirname + "/browser/browseroutput.js",
+ browserBundle,
+ vmBundle;
+
+ b.use(browserifyMiddleware);
+ b.require(__dirname + "/testModules/sharedTestCases.js");
+ vmBundle = b.bundle();
+ browserBundle = vmBundle;
+
+ // Setup for mocha
+ browserBundle += 'window.onload = function () {' +
+ 'mocha.setup("bdd");' +
+ 'window.browserifyRequire("/test/testModules/sharedTestCases.js");' +
+ 'mocha.run();' +
+ '};';
+
+ vmBundle += 'window.browserifyRequire("/test/testModules/sharedTestCases.js");';
+
+ // Output for browser-testing
+ fs.mkdir(__dirname + "/browser", function onMkDir() {
+ fs.writeFile(browserOutput, browserBundle, "utf8", done);
+
+ // This should throw no exception.
+ runInFakeBrowserContext(vmBundle, browserOutput);
+ });
+ });
+}); \ No newline at end of file
diff --git a/test/browserify.getRewireRequires.test.js b/test/browserify.getRewireRequires.test.js
new file mode 100644
index 0000000..98673cc
--- /dev/null
+++ b/test/browserify.getRewireRequires.test.js
@@ -0,0 +1,19 @@
+var expect = require("expect.js"),
+ getRewireRequires = require("../lib/browserify/getRewireRequires.js");
+
+describe("getRewireRequires", function () {
+ it("should detect a single rewire()", function () {
+ var src = "rewire('aaa/bbb/ccc.js');";
+
+ expect(getRewireRequires(src)).to.eql(["aaa/bbb/ccc.js"]);
+ });
+ it("should detect multiple rewire()", function () {
+ var src = "var aaa = rewire('aaa/bbb/ccc.js'); var bbb = rewire('bbb/ccc/ddd.js');";
+
+ expect(getRewireRequires(src)).to.eql(["aaa/bbb/ccc.js", "bbb/ccc/ddd.js"]);
+
+ src = "rewire('aaa/bbb/ccc.js'); rewire('bbb/ccc/ddd.js');";
+
+ expect(getRewireRequires(src)).to.eql(["aaa/bbb/ccc.js", "bbb/ccc/ddd.js"]);
+ });
+}); \ No newline at end of file
diff --git a/test/rewire.test.js b/test/rewire.test.js
index fa17088..1783ad5 100644
--- a/test/rewire.test.js
+++ b/test/rewire.test.js
@@ -2,169 +2,10 @@
// In case this module was in strict mode, all other modules called by this would also be strict.
// But when testing if the strict mode is preserved, we must ensure that this module is NOT strict.
-var path = require("path"),
- expect = require("expect.js"),
- rewire = require("../lib/index.js");
-
-var testModules = {
- A: path.resolve(__dirname, "./testModules/moduleA.js"),
- B: path.resolve(__dirname, "./testModules/moduleB.js"),
- someOtherModule: path.resolve(__dirname, "./testModules/someOtherModule.js"),
- emptyModule: path.resolve(__dirname, "./testModules/emptyModule.js"),
- strictModule: path.resolve(__dirname, "./testModules/strictModule.js")
- };
-
-
-function checkForTypeError(err) {
- expect(err.constructor).to.be(TypeError);
-}
-
-function cleanRequireCache() {
- var moduleName,
- modulePath;
-
- for (moduleName in testModules) {
- if (testModules.hasOwnProperty(moduleName)) {
- modulePath = testModules[moduleName];
- delete require.cache[modulePath];
- }
- }
-}
-
describe("rewire", function () {
- beforeEach(cleanRequireCache); // ensuring a clean test environment
- it("should work like require()", function () {
- expect(rewire("./testModules/moduleA.js")).to.be(require("./testModules/moduleA.js"));
- cleanRequireCache();
- expect(rewire("../test/testModules/moduleA.js")).to.be(require("../test/testModules/moduleA.js"));
- cleanRequireCache();
- expect(rewire(testModules.A)).to.be(require(testModules.A));
- });
- it("should modify the module so it provides a __set__ - function", function () {
- expect(rewire(testModules.A).__set__).to.be.a(Function);
- expect(rewire(testModules.B).__set__).to.be.a(Function);
- });
- it("should modify the module so it provides a __get__ - function", function () {
- expect(rewire(testModules.A).__get__).to.be.a(Function);
- expect(rewire(testModules.B).__get__).to.be.a(Function);
- });
- it("should not influence other modules", function () {
- var rewiredModuleA = rewire(testModules.A);
-
- expect(require(testModules.someOtherModule).__set__).to.be(undefined);
- expect(require(testModules.someOtherModule).__get__).to.be(undefined);
- expect(require("fs").__set__).to.be(undefined);
- expect(require("fs").__get__).to.be(undefined);
- });
- it("should not influence global objects by default", function () {
- expect(function () {
- rewire(testModules.A).checkSomeGlobals();
- rewire(testModules.B).checkSomeGlobals();
- }).to.not.throwException();
- });
- it("should provide the ability to set private vars", function () {
- var rewiredModuleA = rewire(testModules.A),
- newObj = {};
-
- expect(rewiredModuleA.getMyNumber()).to.be(0);
- rewiredModuleA.__set__("myNumber", 2);
- expect(rewiredModuleA.getMyNumber()).to.be(2);
- rewiredModuleA.__set__("myObj", newObj);
- expect(rewiredModuleA.getMyObj()).to.be(newObj);
- rewiredModuleA.__set__("env", "ENVENV");
- });
- it("should provide the ability to get private vars", function () {
- var rewiredModuleA = rewire(testModules.A);
-
- expect(rewiredModuleA.__get__("myNumber")).to.be(rewiredModuleA.getMyNumber());
- expect(rewiredModuleA.__get__("myObj")).to.be(rewiredModuleA.getMyObj());
- });
- it("should provide the ability to inject mocks", function (done) {
- var rewiredModuleA = rewire(testModules.A),
- mockedFs = {
- readFileSync: function (file) {
- expect(file).to.be("bla.txt");
- done();
- }
- };
-
- rewiredModuleA.__set__("fs", mockedFs);
- rewiredModuleA.readFileSync();
- });
- it("should not influence other modules when injecting mocks", function () {
- var rewiredModuleA = rewire(testModules.A),
- someOtherModule,
- mockedFs = {};
-
- rewiredModuleA.__set__("fs", mockedFs);
- someOtherModule = require(testModules.someOtherModule);
- expect(someOtherModule.fs).not.to.be(mockedFs);
- });
- it("should provide the ability to mock global objects just within the module", function () {
- var rewiredModuleA = rewire(testModules.A),
- rewiredModuleB = rewire(testModules.B),
- consoleMock = {},
- processMock = {},
- newFilename = "myFile.js";
-
- rewiredModuleA.__set__({
- console: consoleMock,
- process: processMock
- });
- rewiredModuleA.__set__("__filename", newFilename);
- rewiredModuleB.__set__({
- console: consoleMock,
- process: processMock
- });
- rewiredModuleB.__set__("__filename", newFilename);
- expect(rewiredModuleA.getConsole()).to.be(consoleMock);
- expect(rewiredModuleB.getConsole()).to.be(consoleMock);
- expect(console).not.to.be(consoleMock);
- expect(rewiredModuleA.getProcess()).to.be(processMock);
- expect(rewiredModuleB.getProcess()).to.be(processMock);
- expect(process).not.to.be(processMock);
- expect(rewiredModuleA.getFilename()).to.be(newFilename);
- expect(rewiredModuleB.getFilename()).to.be(newFilename);
- });
- it("should cache the rewired module", function () {
- var rewired;
-
- rewired = rewire(testModules.someOtherModule);
- expect(require(testModules.A).someOtherModule).to.be(rewired);
- cleanRequireCache();
- rewired = rewire(testModules.someOtherModule, true);
- expect(require(testModules.A).someOtherModule).to.be(rewired);
- });
- it("should not cache the rewired module on demand", function () {
- var rewired;
-
- rewired = rewire(testModules.someOtherModule, false);
- expect(require(testModules.A).someOtherModule).not.to.be(rewired);
- });
- it("should not influence the original node require if nothing has been required within the rewired module", function () {
- rewire(testModules.emptyModule); // nothing happens here because emptyModule doesn't require anything
- expect(require(testModules.A).__set__).to.be(undefined); // if restoring the original node require didn't worked, the module would have a setter
- });
- it("subsequent calls of rewire should always return a new instance", function () {
- expect(rewire(testModules.A)).not.to.be(rewire(testModules.A));
- });
- it("should preserve the strict mode", function () {
- var strictModule = rewire(testModules.strictModule);
-
- expect(function () {
- strictModule.doSomethingUnstrict();
- }).to.throwException(checkForTypeError);
- });
- describe("#reset", function () {
- it("should remove all rewired modules from cache", function () {
- var rewiredModuleA = rewire(testModules.A),
- rewiredModuleB = rewire(testModules.B);
-
- expect(require(testModules.A)).to.be(rewiredModuleA);
- expect(require(testModules.B)).to.be(rewiredModuleB);
- rewire.reset();
- expect(require(testModules.A)).not.to.be(rewiredModuleA);
- expect(require(testModules.B)).not.to.be(rewiredModuleB);
- });
+ before(require("./testHelpers/createFakePackageJSON.js"));
+ after(require("./testHelpers/removeFakePackageJSON.js"));
+ it("should pass all shared test cases", function () {
+ require("./testModules/sharedTestCases.js");
});
}); \ No newline at end of file
diff --git a/test/testHelpers/createFakePackageJSON.js b/test/testHelpers/createFakePackageJSON.js
new file mode 100644
index 0000000..dbda04f
--- /dev/null
+++ b/test/testHelpers/createFakePackageJSON.js
@@ -0,0 +1,11 @@
+var fs = require("fs"),
+ pathUtil = require("path"),
+ nodeModulesDir = pathUtil.resolve(__dirname, "../../node_modules");
+
+module.exports = function createFakePackageJSON(done) {
+ var fakePackageJSON = '{ "main": "../../lib/index.js" }';
+
+ fs.mkdir(nodeModulesDir + "/rewire", function onMkDir() {
+ fs.writeFile(nodeModulesDir + "/rewire/package.json", fakePackageJSON, "utf8", done);
+ });
+}; \ No newline at end of file
diff --git a/test/testHelpers/removeFakePackageJSON.js b/test/testHelpers/removeFakePackageJSON.js
new file mode 100644
index 0000000..676339e
--- /dev/null
+++ b/test/testHelpers/removeFakePackageJSON.js
@@ -0,0 +1,9 @@
+var fs = require("fs"),
+ pathUtil = require("path"),
+ nodeModulesDir = pathUtil.resolve(__dirname, "../../node_modules");
+
+module.exports = function removeFakePackageJSON(done) {
+ fs.unlink(nodeModulesDir + "/rewire/package.json", function onPackageJSONUnlink() {
+ fs.rmdir(nodeModulesDir + "/rewire", done);
+ });
+}; \ No newline at end of file
diff --git a/test/testModules/moduleA.js b/test/testModules/moduleA.js
index 87f4949..fd665f7 100644
--- a/test/testModules/moduleA.js
+++ b/test/testModules/moduleA.js
@@ -29,7 +29,7 @@ function readFileSync() {
function checkSomeGlobals() {
if (typeof global === "undefined") {
- //throw new ReferenceError("global is undefined");
+ throw new ReferenceError("global is undefined");
}
if (typeof process === "undefined") {
throw new ReferenceError("process is undefined");
@@ -37,9 +37,6 @@ function checkSomeGlobals() {
if (typeof console === "undefined") {
throw new ReferenceError("console is undefined");
}
- if (typeof Buffer === "undefined") {
- throw new ReferenceError("Buffer is undefined");
- }
if (typeof __filename === "undefined") {
throw new ReferenceError("__filename is undefined");
}
diff --git a/test/testModules/moduleB.js b/test/testModules/moduleB.js
index c9fec13..fd665f7 100644
--- a/test/testModules/moduleB.js
+++ b/test/testModules/moduleB.js
@@ -3,6 +3,7 @@
var someOtherModule = require("./someOtherModule.js"),
myNumber = 0, // copy by value
myObj = {}, // copy by reference
+ env = "bla",
fs = require("fs");
// We need getters and setters for private vars to check if our injected setters and getters actual work
@@ -36,9 +37,6 @@ function checkSomeGlobals() {
if (typeof console === "undefined") {
throw new ReferenceError("console is undefined");
}
- if (typeof Buffer === "undefined") {
- throw new ReferenceError("Buffer is undefined");
- }
if (typeof __filename === "undefined") {
throw new ReferenceError("__filename is undefined");
}
@@ -62,20 +60,14 @@ function getFilename() {
return __filename;
}
-function main() {
-
-}
-
-main.setMyNumber = setMyNumber;
-main.getMyNumber = getMyNumber;
-main.setMyObj = setMyObj;
-main.getMyObj = getMyObj;
-main.readFileSync = readFileSync;
-main.checkSomeGlobals = checkSomeGlobals;
-main.getConsole = getConsole;
-main.getProcess = getProcess;
-main.getFilename = getFilename;
-main.someOtherModule = someOtherModule;
-
// different styles of exports in moduleA.js and moduleB.js
-module.exports = main;
+exports.setMyNumber = setMyNumber;
+exports.getMyNumber = getMyNumber;
+exports.setMyObj = setMyObj;
+exports.getMyObj = getMyObj;
+exports.readFileSync = readFileSync;
+exports.checkSomeGlobals = checkSomeGlobals;
+exports.getConsole = getConsole;
+exports.getProcess = getProcess;
+exports.getFilename = getFilename;
+exports.someOtherModule = someOtherModule; \ No newline at end of file
diff --git a/test/testModules/sharedTestCases.js b/test/testModules/sharedTestCases.js
new file mode 100644
index 0000000..01f7e7b
--- /dev/null
+++ b/test/testModules/sharedTestCases.js
@@ -0,0 +1,175 @@
+// Don't run code in ES5 strict mode.
+// In case this module was in strict mode, all other modules called by this would also be strict.
+// But when testing if the strict mode is preserved, we must ensure that this module is NOT strict.
+
+var path = require("path"),
+ expect = require("expect.js"),
+ rewire = require("rewire");
+
+var testModules = {
+ A: path.resolve(__dirname, "./moduleA.js"),
+ B: path.resolve(__dirname, "./moduleB.js"),
+ someOtherModule: path.resolve(__dirname, "./someOtherModule.js"),
+ emptyModule: path.resolve(__dirname, "./emptyModule.js"),
+ strictModule: path.resolve(__dirname, "./strictModule.js")
+ };
+
+
+function checkForTypeError(err) {
+ expect(err.constructor).to.be(TypeError);
+}
+
+function cleanRequireCache() {
+ var moduleName,
+ modulePath;
+
+ for (moduleName in testModules) {
+ if (testModules.hasOwnProperty(moduleName)) {
+ modulePath = testModules[moduleName];
+ if (typeof window === "undefined") {
+ delete require.cache[modulePath];
+ } else {
+ if (typeof window.browserifyRequire.modules[modulePath]._cached === "object") {
+ delete window.browserifyRequire.modules[modulePath]._cached;
+ }
+ }
+ }
+ }
+}
+
+describe("rewire " + (typeof window === "undefined"? "in node.js": "in the browser"), function () {
+ beforeEach(cleanRequireCache); // ensuring a clean test environment
+ it("should work like require()", function () {
+ expect(rewire("./moduleA.js")).to.be(require("./moduleA.js"));
+ cleanRequireCache();
+ expect(rewire("../testModules/moduleA.js")).to.be(require("../testModules/moduleA.js"));
+ cleanRequireCache();
+ expect(rewire("./moduleA.js")).to.be(require("./moduleA.js"));
+ });
+ it("should modify the module so it provides a __set__ - function", function () {
+ expect(rewire("./moduleA.js").__set__).to.be.a(Function);
+ expect(rewire("./moduleB.js").__set__).to.be.a(Function);
+ });
+ it("should modify the module so it provides a __get__ - function", function () {
+ expect(rewire("./moduleA.js").__get__).to.be.a(Function);
+ expect(rewire("./moduleB.js").__get__).to.be.a(Function);
+ });
+ it("should not influence other modules", function () {
+ var rewiredModuleA = rewire("./moduleA.js");
+
+ expect(require("./someOtherModule.js").__set__).to.be(undefined);
+ expect(require("./someOtherModule.js").__get__).to.be(undefined);
+ expect(require("fs").__set__).to.be(undefined);
+ expect(require("fs").__get__).to.be(undefined);
+ });
+ it("should not influence global objects by default", function () {
+ // This should throw no exception
+ rewire("./moduleA.js").checkSomeGlobals();
+ rewire("./moduleB.js").checkSomeGlobals();
+ });
+ it("should provide the ability to set private vars", function () {
+ var rewiredModuleA = rewire("./moduleA.js"),
+ newObj = {};
+
+ expect(rewiredModuleA.getMyNumber()).to.be(0);
+ rewiredModuleA.__set__("myNumber", 2);
+ expect(rewiredModuleA.getMyNumber()).to.be(2);
+ rewiredModuleA.__set__("myObj", newObj);
+ expect(rewiredModuleA.getMyObj()).to.be(newObj);
+ rewiredModuleA.__set__("env", "ENVENV");
+ });
+ it("should provide the ability to get private vars", function () {
+ var rewiredModuleA = rewire("./moduleA.js");
+
+ expect(rewiredModuleA.__get__("myNumber")).to.be(rewiredModuleA.getMyNumber());
+ expect(rewiredModuleA.__get__("myObj")).to.be(rewiredModuleA.getMyObj());
+ });
+ it("should provide the ability to inject mocks", function (done) {
+ var rewiredModuleA = rewire("./moduleA.js"),
+ mockedFs = {
+ readFileSync: function (file) {
+ expect(file).to.be("bla.txt");
+ done();
+ }
+ };
+
+ rewiredModuleA.__set__("fs", mockedFs);
+ rewiredModuleA.readFileSync();
+ });
+ it("should not influence other modules when injecting mocks", function () {
+ var rewiredModuleA = rewire("./moduleA.js"),
+ someOtherModule,
+ mockedFs = {};
+
+ rewiredModuleA.__set__("fs", mockedFs);
+ someOtherModule = require("./someOtherModule.js");
+ expect(someOtherModule.fs).not.to.be(mockedFs);
+ });
+ it("should provide the ability to mock global objects just within the module", function () {
+ var rewiredModuleA = rewire("./moduleA.js"),
+ rewiredModuleB = rewire("./moduleB.js"),
+ consoleMock = {},
+ processMock = {},
+ newFilename = "myFile.js";
+
+ rewiredModuleA.__set__({
+ console: consoleMock,
+ process: processMock
+ });
+ rewiredModuleA.__set__("__filename", newFilename);
+ rewiredModuleB.__set__({
+ console: consoleMock,
+ process: processMock
+ });
+ rewiredModuleB.__set__("__filename", newFilename);
+ expect(rewiredModuleA.getConsole()).to.be(consoleMock);
+ expect(rewiredModuleB.getConsole()).to.be(consoleMock);
+ expect(console).not.to.be(consoleMock);
+ expect(rewiredModuleA.getProcess()).to.be(processMock);
+ expect(rewiredModuleB.getProcess()).to.be(processMock);
+ expect(process).not.to.be(processMock);
+ expect(rewiredModuleA.getFilename()).to.be(newFilename);
+ expect(rewiredModuleB.getFilename()).to.be(newFilename);
+ });
+ it("should cache the rewired module", function () {
+ var rewired;
+
+ rewired = rewire("./someOtherModule.js");
+ expect(require("./moduleA.js").someOtherModule).to.be(rewired);
+ cleanRequireCache();
+ rewired = rewire("./someOtherModule.js", true);
+ expect(require("./moduleA.js").someOtherModule).to.be(rewired);
+ });
+ it("should not cache the rewired module on demand", function () {
+ var rewired;
+
+ rewired = rewire("./someOtherModule.js", false);
+ expect(require("./moduleA.js").someOtherModule).not.to.be(rewired);
+ });
+ it("should not influence the original node require if nothing has been required within the rewired module", function () {
+ rewire("./emptyModule.js"); // nothing happens here because emptyModule doesn't require anything
+ expect(require("./moduleA.js").__set__).to.be(undefined); // if restoring the original node require didn't worked, the module would have a setter
+ });
+ it("subsequent calls of rewire should always return a new instance", function () {
+ expect(rewire("./moduleA.js")).not.to.be(rewire("./moduleA.js"));
+ });
+ it("should preserve the strict mode", function () {
+ var strictModule = rewire("./strictModule.js");
+
+ expect(function () {
+ strictModule.doSomethingUnstrict();
+ }).to.throwException(checkForTypeError);
+ });
+ describe("#reset", function () {
+ it("should remove all rewired modules from cache", function () {
+ var rewiredModuleA = rewire("./moduleA.js"),
+ rewiredModuleB = rewire("./moduleB.js");
+
+ expect(require("./moduleA.js")).to.be(rewiredModuleA);
+ expect(require("./moduleB.js")).to.be(rewiredModuleB);
+ rewire.reset();
+ expect(require("./moduleA.js")).not.to.be(rewiredModuleA);
+ expect(require("./moduleB.js")).not.to.be(rewiredModuleB);
+ });
+ });
+}); \ No newline at end of file