Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit5f68ec6

Browse files
committed
Improve shared test cases
1 parentf6e3dd0 commit5f68ec6

File tree

1 file changed

+71
-9
lines changed

1 file changed

+71
-9
lines changed

‎test/testModules/sharedTestCases.js

Lines changed: 71 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,30 @@
22
// In case this module was in strict mode, all other modules called by this would also be strict.
33
// But when testing if the strict mode is preserved, we must ensure that this module is NOT strict.
44

5+
// These shared test cases are used to check if the provided implementation of rewire is compatible
6+
// with the original rewire. Since you can use rewire with client-side bundlers like webpack we need
7+
// to test the implementation there again.
8+
//@see https://github.com/jhnns/rewire-webpack
9+
510
varexpect=require("expect.js"),
6-
rewire=require("rewire");
11+
rewire=require("rewire"),
12+
__set__Src=require("../../lib/__set__.js").toString(),
13+
__get__Src=require("../../lib/__get__.js").toString(),
14+
__with__Src=require("../../lib/__with__.js").toString();
715

816
functioncheckForTypeError(err){
917
expect(err.constructor).to.be(TypeError);
1018
}
1119

1220
describe("rewire "+(typeoftestEnv==="undefined"?"(node)":"("+testEnv+")"),function(){
21+
1322
it("should work like require()",function(){
1423
rewire("./moduleA.js").getFilename();
1524
require("./moduleA.js").getFilename();
1625
expect(rewire("./moduleA.js").getFilename()).to.eql(require("./moduleA.js").getFilename());
1726
expect(rewire("../testModules/someOtherModule.js").filename).to.eql(require("../testModules/someOtherModule.js").filename);
1827
});
28+
1929
it("should return a fresh instance of the module",function(){
2030
varsomeOtherModule=require("./someOtherModule.js"),
2131
rewiredSomeOtherModule;
@@ -24,6 +34,7 @@ describe("rewire " + (typeof testEnv === "undefined"? "(node)": "(" + testEnv +
2434
rewiredSomeOtherModule=rewire("./someOtherModule.js");
2535
expect(rewiredSomeOtherModule.fs).not.to.be("This has been modified");
2636
});
37+
2738
it("should not cache the rewired module",function(){
2839
varrewired,
2940
someOtherModule=require("./someOtherModule.js");
@@ -36,26 +47,42 @@ describe("rewire " + (typeof testEnv === "undefined"? "(node)": "(" + testEnv +
3647
expect(require("./moduleA.js").someOtherModule).to.be(someOtherModule);
3748
expect(require("./moduleA.js").someOtherModule.fs).to.be("This has been changed");
3849
});
39-
it("should modify the module so it provides a __set__ - function",function(){
40-
expect(rewire("./moduleA.js").__set__).to.be.a(Function);
41-
expect(rewire("./moduleB.js").__set__).to.be.a(Function);
50+
51+
// By comparing the src we can ensure that the provided __set__ function is our tested implementation
52+
it("should modify the module so it provides the __set__ - function",function(){
53+
expect(rewire("./moduleA.js").__set__.toString()).to.be(__set__Src);
54+
expect(rewire("./moduleB.js").__set__.toString()).to.be(__set__Src);
55+
});
56+
57+
// By comparing the src we can ensure that the provided __set__ function is our tested implementation
58+
it("should modify the module so it provides the __get__ - function",function(){
59+
expect(rewire("./moduleA.js").__get__.toString()).to.be(__get__Src);
60+
expect(rewire("./moduleB.js").__get__.toString()).to.be(__get__Src);
4261
});
43-
it("should modify the module so it provides a __get__ - function",function(){
44-
expect(rewire("./moduleA.js").__get__).to.be.a(Function);
45-
expect(rewire("./moduleB.js").__get__).to.be.a(Function);
62+
63+
// By comparing the src we can ensure that the provided __set__ function is our tested implementation
64+
it("should modify the module so it provides the __with__ - function",function(){
65+
expect(rewire("./moduleA.js").__with__.toString()).to.be(__with__Src);
66+
expect(rewire("./moduleB.js").__with__.toString()).to.be(__with__Src);
4667
});
68+
4769
it("should not influence other modules",function(){
4870
rewire("./moduleA.js");
4971

5072
expect(require("./someOtherModule.js").__set__).to.be(undefined);
5173
expect(require("./someOtherModule.js").__get__).to.be(undefined);
74+
expect(require("./someOtherModule.js").__with__).to.be(undefined);
5275
});
76+
5377
it("should not override/influence global objects by default",function(){
5478
// This should throw no exception
5579
rewire("./moduleA.js").checkSomeGlobals();
5680
rewire("./moduleB.js").checkSomeGlobals();
5781
});
58-
it("should provide the ability to set private vars",function(){
82+
83+
// This is just an integration test for the __set__ method
84+
// You can find a full test for __set__ under /test/__set__.test.js
85+
it("should provide a working __set__ method",function(){
5986
varrewiredModuleA=rewire("./moduleA.js"),
6087
newObj={};
6188

@@ -66,12 +93,37 @@ describe("rewire " + (typeof testEnv === "undefined"? "(node)": "(" + testEnv +
6693
expect(rewiredModuleA.getMyObj()).to.be(newObj);
6794
rewiredModuleA.__set__("env","ENVENV");
6895
});
69-
it("should provide the ability to get private vars",function(){
96+
97+
// This is just an integration test for the __get__ method
98+
// You can find a full test for __get__ under /test/__get__.test.js
99+
it("should provide a working __get__ method",function(){
70100
varrewiredModuleA=rewire("./moduleA.js");
71101

72102
expect(rewiredModuleA.__get__("myNumber")).to.be(rewiredModuleA.getMyNumber());
73103
expect(rewiredModuleA.__get__("myObj")).to.be(rewiredModuleA.getMyObj());
74104
});
105+
106+
// This is just an integration test for the __with__ method
107+
// You can find a full test for __with__ under /test/__with__.test.js
108+
it("should provide a working __with__ method",function(){
109+
varrewiredModuleA=rewire("./moduleA.js"),
110+
newObj={};
111+
112+
expect(rewiredModuleA.getMyNumber()).to.be(0);
113+
expect(rewiredModuleA.getMyObj()).to.not.be(newObj);
114+
115+
rewiredModuleA.__with__({
116+
myNumber:2,
117+
myObj:newObj
118+
})(function(){
119+
expect(rewiredModuleA.getMyNumber()).to.be(2);
120+
expect(rewiredModuleA.getMyObj()).to.be(newObj);
121+
});
122+
123+
expect(rewiredModuleA.getMyNumber()).to.be(0);
124+
expect(rewiredModuleA.getMyObj()).to.not.be(newObj);
125+
});
126+
75127
it("should provide the ability to inject mocks",function(done){
76128
varrewiredModuleA=rewire("./moduleA.js"),
77129
mockedFs={
@@ -84,6 +136,7 @@ describe("rewire " + (typeof testEnv === "undefined"? "(node)": "(" + testEnv +
84136
rewiredModuleA.__set__("fs",mockedFs);
85137
rewiredModuleA.readFileSync();
86138
});
139+
87140
it("should not influence other modules when injecting mocks",function(){
88141
varrewiredModuleA=rewire("./moduleA.js"),
89142
someOtherModule,
@@ -93,6 +146,7 @@ describe("rewire " + (typeof testEnv === "undefined"? "(node)": "(" + testEnv +
93146
someOtherModule=require("./someOtherModule.js");
94147
expect(someOtherModule.fs).not.to.be(mockedFs);
95148
});
149+
96150
it("should provide the ability to mock global objects just within the module",function(){
97151
varrewiredModuleA=rewire("./moduleA.js"),
98152
rewiredModuleB=rewire("./moduleB.js"),
@@ -123,6 +177,7 @@ describe("rewire " + (typeof testEnv === "undefined"? "(node)": "(" + testEnv +
123177
expect(document===documentMock).to.be(false);
124178
}
125179
});
180+
126181
it("should be possible to mock global objects that are added on runtime",function(){
127182
varrewiredModule;
128183

@@ -144,26 +199,31 @@ describe("rewire " + (typeof testEnv === "undefined"? "(node)": "(" + testEnv +
144199
}
145200
}
146201
});
202+
147203
it("should not be a problem to have a comment on file end",function(){
148204
varrewired=rewire("./emptyModule.js");
149205

150206
rewired.__set__("someVar","hello");
151207
expect(rewired.__get__("someVar")).to.be("hello");
152208
});
209+
153210
it("should not influence the original require if nothing has been required within the rewired module",function(){
154211
rewire("./emptyModule.js");// nothing happens here because emptyModule doesn't require anything
155212
expect(require("./moduleA.js").__set__).to.be(undefined);// if restoring the original node require didn't worked, the module would have a setter
156213
});
214+
157215
it("subsequent calls of rewire should always return a new instance",function(){
158216
expect(rewire("./moduleA.js")).not.to.be(rewire("./moduleA.js"));
159217
});
218+
160219
it("should preserve the strict mode",function(){
161220
varstrictModule=rewire("./strictModule.js");
162221

163222
expect(function(){
164223
strictModule.doSomethingUnstrict();
165224
}).to.throwException(checkForTypeError);
166225
});
226+
167227
it("should not modify line numbers in stack traces",function(){
168228
varthrowError=rewire("./throwError.js");
169229

@@ -175,9 +235,11 @@ describe("rewire " + (typeof testEnv === "undefined"? "(node)": "(" + testEnv +
175235
}
176236
}
177237
});
238+
178239
it("should throw a TypeError if the path is not a string",function(){
179240
expect(function(){
180241
rewire(null);
181242
}).to.throwException(checkForTypeError);
182243
});
244+
183245
});

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp