diff options
author | Johannes <mail@johannesewald.de> | 2012-06-04 02:23:27 +0400 |
---|---|---|
committer | Johannes <mail@johannesewald.de> | 2012-06-04 02:23:27 +0400 |
commit | b4b2794f5a5e5977e048ff777ac53263144126e6 (patch) | |
tree | 11213db4acbb4bd220069bd426b83d9739339379 /test | |
parent | d4eea33555f4e67be674c046ff1d1a9a460af94a (diff) |
changed repo-name to rewire
Diffstat (limited to 'test')
-rw-r--r-- | test/debug.test.js | 11 | ||||
-rw-r--r-- | test/rewire.test.js | 112 | ||||
-rw-r--r-- | test/testModules/A/moduleA.js | 27 | ||||
-rw-r--r-- | test/testModules/debuggerModule.js | 13 | ||||
-rw-r--r-- | test/trick.test.js | 104 |
5 files changed, 155 insertions, 112 deletions
diff --git a/test/debug.test.js b/test/debug.test.js new file mode 100644 index 0000000..4a388b6 --- /dev/null +++ b/test/debug.test.js @@ -0,0 +1,11 @@ +"use strict"; // run code in ES5 strict mode
+
+var rewire = require("../lib/index.js");
+
+// add breakpoints in testModules/debuggerModule.js and debug this file with your IDE to
+// check if debugging works with rewire.
+var debuggerModule = rewire("./testModules/debuggerModule.js", null, {
+ someVar: "Look if you can see me in your IDE when holding at the breakpoints"
+});
+
+debuggerModule();
\ No newline at end of file diff --git a/test/rewire.test.js b/test/rewire.test.js new file mode 100644 index 0000000..41dff60 --- /dev/null +++ b/test/rewire.test.js @@ -0,0 +1,112 @@ +"use strict"; // run code in ES5 strict mode
+
+var path = require("path"),
+ expect = require("expect.js"),
+ rewire = require("../lib/index.js");
+
+var testModules = [
+ path.resolve(__dirname, "./testModules/index.js"),
+ path.resolve(__dirname, "./testModules/A/moduleA.js"),
+ path.resolve(__dirname, "./testModules/B/moduleB.js"),
+ path.resolve(__dirname, "./testModules/C/moduleC.js")
+ ];
+
+
+function cleanRequireCache() {
+ var i;
+
+ for (i = 0; i < testModules.length; i++) {
+ delete require.cache[testModules[i]];
+ }
+}
+
+describe("#rewire", function () {
+ beforeEach(cleanRequireCache); // ensuring a clean test environment
+ it("should work like require() when omitting all other params", function () {
+ expect(rewire("./testModules/A/moduleA.js")).to.be(require("./testModules/A/moduleA.js"));
+ });
+ it("should require all mocks", function () {
+ var rewired,
+ fsMock = {},
+ mocks = {},
+ moduleBMock = {},
+ moduleCMock = {},
+ toSrcMock = {},
+ indexMock = {};
+
+ mocks["fs"] = fsMock;
+ mocks[path.resolve(__dirname, "./testModules/B/moduleB.js")] = moduleBMock;
+ mocks["../C/moduleC.js"] = moduleCMock;
+ mocks["toSrc"] = toSrcMock;
+ mocks["../"] = indexMock;
+
+ rewired = rewire("./testModules/A/moduleA.js", mocks);
+ expect(rewired.fs).to.be(fsMock);
+ expect(rewired.b).to.be(moduleBMock);
+ expect(rewired.c).to.be(moduleCMock);
+ expect(rewired.toSrc).to.be(toSrcMock);
+ expect(rewired.index).to.be(indexMock);
+ });
+ it("should inject object modifications", function () {
+ var rewired,
+ injections = {
+ process: {
+ argv: ["arg1", "arg2", "arg3"]
+ },
+ console: 123
+ };
+
+ rewired = rewire("./testModules/A/moduleA.js", null, injections);
+ rewired.exportAll();
+ expect(rewired.process).not.to.be(process);
+ expect(process.argv).not.to.eql(injections.process.argv);
+ expect(rewired.process).to.eql(injections.process);
+ expect(rewired.console).to.be(123);
+ });
+ it("should inject custom scripts", function () {
+ var rewired,
+ script = "var console = 456;";
+
+ rewired = rewire("./testModules/A/moduleA.js", null, script);
+ rewired.exportAll();
+ expect(rewired.console).to.be(456);
+ });
+ it("should leak private variables", function () {
+ var rewired,
+ leaks = ["myPrivateVar"];
+
+ rewired = rewire("./testModules/A/moduleA.js", null, null, leaks);
+ expect(rewired.__.myPrivateVar).to.be("Hello I'm very private");
+ });
+ it("should leak private functions", function () {
+ var rewired,
+ leaks = ["myPrivateFunction"];
+
+ rewired = rewire("./testModules/A/moduleA.js", null, null, leaks);
+ expect(rewired.__.myPrivateFunction()).to.be("Hello I'm very private");
+ });
+ it("should leak nothing on demand", function () {
+ var rewired;
+
+ rewired = rewire("./testModules/A/moduleA.js");
+ expect(rewired.__).to.be(undefined);
+ });
+ it("should cache the rewired module", function () {
+ var rewired;
+
+ rewired = rewire("./testModules/B/moduleB.js");
+ rewired.requireIndex();
+ expect(rewired.index.b).to.be(rewired);
+ cleanRequireCache();
+ rewired = rewire("./testModules/B/moduleB.js", null, null, null, true);
+ rewired.requireIndex();
+ expect(rewired.index.b).to.be(rewired);
+ });
+ it("should not cache the rewired module on demand", function () {
+ var rewired;
+
+ rewired = rewire("./testModules/B/moduleB.js", null, null, null, false);
+ rewired.requireIndex();
+ expect(rewired.index.b).not.to.be(rewired);
+ });
+});
\ No newline at end of file diff --git a/test/testModules/A/moduleA.js b/test/testModules/A/moduleA.js index 1599f01..ffa3290 100644 --- a/test/testModules/A/moduleA.js +++ b/test/testModules/A/moduleA.js @@ -11,11 +11,22 @@ var path = require("path"), var myPrivateVar = "Hello I'm very private";
-// expose all required modules to test for mocks
-exports.fs = fs;
-exports.b = b;
-exports.c = c;
-exports.toSrc = toSrc;
-exports.index = index;
-exports.process = process;
-exports.console = console;
\ No newline at end of file +function myPrivateFunction() {
+ return "Hello I'm very private";
+}
+
+function exportAll() {
+ // expose all required modules to test for mocks
+ exports.fs = fs;
+ exports.b = b;
+ exports.c = c;
+ exports.toSrc = toSrc;
+ exports.index = index;
+ exports.process = process;
+ exports.console = console;
+}
+
+exportAll();
+exports.exportAll = exportAll;
+
+
diff --git a/test/testModules/debuggerModule.js b/test/testModules/debuggerModule.js new file mode 100644 index 0000000..926c607 --- /dev/null +++ b/test/testModules/debuggerModule.js @@ -0,0 +1,13 @@ +"use strict"; // run code in ES5 strict mode
+
+// Add a breakpoint on line 6 and on line 11 and debug "debug.test.js" to test if the IDE stops at these points.
+// Watch also the variable someVar that is injected by rewire. It will be undefined at this point because
+// all injections are executed at the end of the module.
+// It's already visible because of hoisting: http://net.tutsplus.com/tutorials/javascript-ajax/quick-tip-javascript-hoisting-explained/)
+var someNumber = 0;
+
+module.exports = function () {
+ // In this line someVar will be defined.
+ someNumber++;
+ someVar;
+};
\ No newline at end of file diff --git a/test/trick.test.js b/test/trick.test.js deleted file mode 100644 index 92055bc..0000000 --- a/test/trick.test.js +++ /dev/null @@ -1,104 +0,0 @@ -"use strict"; // run code in ES5 strict mode
-
-var path = require("path"),
- expect = require("expect.js"),
- trick = require("../lib/index.js");
-
-var testModules = [
- path.resolve(__dirname, "./testModules/index.js"),
- path.resolve(__dirname, "./testModules/A/moduleA.js"),
- path.resolve(__dirname, "./testModules/B/moduleB.js"),
- path.resolve(__dirname, "./testModules/C/moduleC.js")
- ];
-
-
-function cleanRequireCache() {
- var i;
-
- for (i = 0; i < testModules.length; i++) {
- delete require.cache[testModules[i]];
- }
-}
-
-describe("#trick", function () {
- beforeEach(cleanRequireCache); // ensuring a clean test environment
- it("should work like require() when omitting all other params", function () {
- expect(trick("./testModules/A/moduleA.js")).to.be(require("./testModules/A/moduleA.js"));
- });
- it("should require all mocks", function () {
- var tricked,
- fsMock = {},
- mocks = {},
- moduleBMock = {},
- moduleCMock = {},
- toSrcMock = {},
- indexMock = {};
-
- mocks["fs"] = fsMock;
- mocks[path.resolve(__dirname, "./testModules/B/moduleB.js")] = moduleBMock;
- mocks["../C/moduleC.js"] = moduleCMock;
- mocks["toSrc"] = toSrcMock;
- mocks["../"] = indexMock;
-
- tricked = trick("./testModules/A/moduleA.js", mocks);
- expect(tricked.fs).to.be(fsMock);
- expect(tricked.b).to.be(moduleBMock);
- expect(tricked.c).to.be(moduleCMock);
- expect(tricked.toSrc).to.be(toSrcMock);
- expect(tricked.index).to.be(indexMock);
- });
- it("should inject object modifications", function () {
- var tricked,
- injections = {
- process: {
- argv: ["arg1", "arg2", "arg3"]
- },
- console: 123
- };
-
- tricked = trick("./testModules/A/moduleA.js", null, injections);
- expect(tricked.process).not.to.be(process);
- expect(process.argv).not.to.eql(injections.process.argv);
- expect(tricked.process).to.eql(injections.process);
- expect(tricked.console).to.be(123);
- });
- it("should inject custom scripts", function () {
- var tricked,
- script = "var console = 456;";
-
- tricked = trick("./testModules/A/moduleA.js", null, script);
-
- expect(tricked.console).to.be(456);
- });
- it("should leak private variables", function () {
- var tricked,
- leaks = ["myPrivateVar"];
-
- tricked = trick("./testModules/A/moduleA.js", null, null, leaks);
- expect(tricked.__.myPrivateVar).to.be("Hello I'm very private");
- });
- it("should leak nothing on demand", function () {
- var tricked;
-
- tricked = trick("./testModules/A/moduleA.js");
- expect(tricked.__).to.be(undefined);
- });
- it("should cache the tricked module", function () {
- var tricked;
-
- tricked = trick("./testModules/B/moduleB.js");
- tricked.requireIndex();
- expect(tricked.index.b).to.be(tricked);
- cleanRequireCache();
- tricked = trick("./testModules/B/moduleB.js", null, null, null, true);
- tricked.requireIndex();
- expect(tricked.index.b).to.be(tricked);
- });
- it("should not cache the tricked module on demand", function () {
- var tricked;
-
- tricked = trick("./testModules/B/moduleB.js", null, null, null, false);
- tricked.requireIndex();
- expect(tricked.index.b).not.to.be(tricked);
- });
-});
\ No newline at end of file |