2
2
// In case this module was in strict mode, all other modules called by this would also be strict.
3
3
// But when testing if the strict mode is preserved, we must ensure that this module is NOT strict.
4
4
5
- var path = require ( "path" ) ,
6
- expect = require ( "expect.js" ) ,
7
- rewire = require ( "../" ) ;
5
+ var expect = require ( "expect.js" ) ;
8
6
9
- function checkForTypeError ( err ) {
10
- expect ( err . constructor ) . to . be ( TypeError ) ;
11
- }
7
+ var rewire ;
12
8
13
9
describe ( "rewire" , function ( ) {
14
- it ( "should work like require()" , function ( ) {
15
- rewire ( "./testModules/moduleA.js" ) . getFilename ( ) ;
16
- require ( "./testModules/moduleA.js" ) . getFilename ( ) ;
17
- expect ( rewire ( "./testModules/moduleA.js" ) . getFilename ( ) ) . to . eql ( require ( "./testModules/moduleA.js" ) . getFilename ( ) ) ;
18
- expect ( rewire ( "./testModules/someOtherModule.js" ) . filename ) . to . eql ( require ( "./testModules/someOtherModule.js" ) . filename ) ;
10
+ it ( "should pass all shared test cases" , function ( ) {
11
+ require ( "./testModules/sharedTestCases.js" ) ;
19
12
} ) ;
20
- it ( "should return a fresh instance of the module" , function ( ) {
21
- var someOtherModule = require ( "./testModules/someOtherModule.js" ) ,
22
- rewiredSomeOtherModule ;
13
+ it ( "should also work with CoffeeScript" , function ( ) {
14
+ var coffeeModule ;
23
15
24
- someOtherModule . fs = "This has been modified" ;
25
- rewiredSomeOtherModule = rewire ( "./testModules/someOtherModule.js" ) ;
26
- expect ( rewiredSomeOtherModule . fs ) . not . to . be ( "This has been modified" ) ;
27
- } ) ;
28
- it ( "should not cache the rewired module" , function ( ) {
29
- var rewired ,
30
- someOtherModule = require ( "./testModules/someOtherModule.js" ) ;
31
-
32
- someOtherModule . fs = "This has been changed" ;
33
-
34
- rewired = rewire ( "./testModules/someOtherModule.js" ) ;
35
- expect ( someOtherModule ) . not . to . be ( rewired ) ;
36
- expect ( require ( "./testModules/moduleA.js" ) . someOtherModule ) . not . to . be ( rewired ) ;
37
- expect ( require ( "./testModules/moduleA.js" ) . someOtherModule ) . to . be ( someOtherModule ) ;
38
- expect ( require ( "./testModules/moduleA.js" ) . someOtherModule . fs ) . to . be ( "This has been changed" ) ;
39
- } ) ;
40
- it ( "should modify the module so it provides a __set__ - function" , function ( ) {
41
- expect ( rewire ( "./testModules/moduleA.js" ) . __set__ ) . to . be . a ( Function ) ;
42
- expect ( rewire ( "./testModules/moduleB.js" ) . __set__ ) . to . be . a ( Function ) ;
43
- } ) ;
44
- it ( "should modify the module so it provides a __get__ - function" , function ( ) {
45
- expect ( rewire ( "./testModules/moduleA.js" ) . __get__ ) . to . be . a ( Function ) ;
46
- expect ( rewire ( "./testModules/moduleB.js" ) . __get__ ) . to . be . a ( Function ) ;
47
- } ) ;
48
- it ( "should not influence other modules" , function ( ) {
49
- var rewiredModuleA = rewire ( "./testModules/moduleA.js" ) ;
50
-
51
- expect ( require ( "./testModules/someOtherModule.js" ) . __set__ ) . to . be ( undefined ) ;
52
- expect ( require ( "./testModules/someOtherModule.js" ) . __get__ ) . to . be ( undefined ) ;
53
- } ) ;
54
- it ( "should not override/influence global objects by default" , function ( ) {
55
- // This should throw no exception
56
- rewire ( "./testModules/moduleA.js" ) . checkSomeGlobals ( ) ;
57
- rewire ( "./testModules/moduleB.js" ) . checkSomeGlobals ( ) ;
58
- } ) ;
59
- it ( "should provide the ability to set private vars" , function ( ) {
60
- var rewiredModuleA = rewire ( "./testModules/moduleA.js" ) ,
61
- newObj = { } ;
62
-
63
- expect ( rewiredModuleA . getMyNumber ( ) ) . to . be ( 0 ) ;
64
- rewiredModuleA . __set__ ( "myNumber" , 2 ) ;
65
- expect ( rewiredModuleA . getMyNumber ( ) ) . to . be ( 2 ) ;
66
- rewiredModuleA . __set__ ( "myObj" , newObj ) ;
67
- expect ( rewiredModuleA . getMyObj ( ) ) . to . be ( newObj ) ;
68
- rewiredModuleA . __set__ ( "env" , "ENVENV" ) ;
69
- } ) ;
70
- it ( "should provide the ability to get private vars" , function ( ) {
71
- var rewiredModuleA = rewire ( "./testModules/moduleA.js" ) ;
72
-
73
- expect ( rewiredModuleA . __get__ ( "myNumber" ) ) . to . be ( rewiredModuleA . getMyNumber ( ) ) ;
74
- expect ( rewiredModuleA . __get__ ( "myObj" ) ) . to . be ( rewiredModuleA . getMyObj ( ) ) ;
75
- } ) ;
76
- it ( "should provide the ability to inject mocks" , function ( done ) {
77
- var rewiredModuleA = rewire ( "./testModules/moduleA.js" ) ,
78
- mockedFs = {
79
- readFileSync :function ( file ) {
80
- expect ( file ) . to . be ( "bla.txt" ) ;
81
- done ( ) ;
82
- }
83
- } ;
84
-
85
- rewiredModuleA . __set__ ( "fs" , mockedFs ) ;
86
- rewiredModuleA . readFileSync ( ) ;
87
- } ) ;
88
- it ( "should not influence other modules when injecting mocks" , function ( ) {
89
- var rewiredModuleA = rewire ( "./testModules/moduleA.js" ) ,
90
- someOtherModule ,
91
- mockedFs = { } ;
92
-
93
- rewiredModuleA . __set__ ( "fs" , mockedFs ) ;
94
- someOtherModule = require ( "./testModules/someOtherModule.js" ) ;
95
- expect ( someOtherModule . fs ) . not . to . be ( mockedFs ) ;
96
- } ) ;
97
- it ( "should provide the ability to mock global objects just within the module" , function ( ) {
98
- var rewiredModuleA = rewire ( "./testModules/moduleA.js" ) ,
99
- rewiredModuleB = rewire ( "./testModules/moduleB.js" ) ,
100
- consoleMock = { } ,
101
- bufferMock = { } ,
102
- documentMock = { } ,
103
- newFilename = "myFile.js" ;
104
-
105
- rewiredModuleA . __set__ ( {
106
- console :consoleMock ,
107
- __filename :newFilename
108
- } ) ;
109
- expect ( rewiredModuleA . getConsole ( ) ) . to . be ( consoleMock ) ;
110
- expect ( rewiredModuleB . getConsole ( ) ) . not . to . be ( consoleMock ) ;
111
- expect ( console ) . not . to . be ( consoleMock ) ;
112
- expect ( rewiredModuleA . getFilename ( ) ) . to . be ( newFilename ) ;
113
- expect ( rewiredModuleB . getFilename ( ) ) . not . to . be ( newFilename ) ;
114
- expect ( console ) . not . to . be ( newFilename ) ;
115
- if ( typeof window === "undefined" ) {
116
- rewiredModuleA . __set__ ( "Buffer" , bufferMock ) ;
117
- expect ( rewiredModuleA . getBuffer ( ) ) . to . be ( bufferMock ) ;
118
- expect ( rewiredModuleB . getBuffer ( ) ) . not . to . be ( bufferMock ) ;
119
- expect ( Buffer ) . not . to . be ( bufferMock ) ;
120
- } else {
121
- rewiredModuleA . __set__ ( "document" , documentMock ) ;
122
- expect ( rewiredModuleA . getDocument ( ) ) . to . be ( documentMock ) ;
123
- expect ( rewiredModuleB . getDocument ( ) === documentMock ) . to . be ( false ) ;
124
- expect ( document === documentMock ) . to . be ( false ) ;
125
- }
126
- } ) ;
127
- it ( "should be possible to mock global objects that are added on runtime" , function ( ) {
128
- var rewiredModule ;
129
-
130
- if ( typeof window === "undefined" ) {
131
- global . someGlobalVar = "test" ;
132
- rewiredModule = rewire ( "./testModules/moduleA.js" ) ;
133
- rewiredModule . __set__ ( "someGlobalVar" , "other value" ) ;
134
- expect ( global . someGlobalVar ) . to . be ( "test" ) ;
135
- expect ( rewiredModule . __get__ ( "someGlobalVar" ) ) . to . be ( "other value" ) ;
136
- delete global . someGlobalVar ;
137
- } else {
138
- window . someGlobalVar = "test" ;
139
- rewiredModule = rewire ( "./testModules/moduleA.js" ) ;
140
- rewiredModule . __set__ ( "someGlobalVar" , "other value" ) ;
141
- expect ( window . someGlobalVar ) . to . be ( "test" ) ;
142
- expect ( rewiredModule . __get__ ( "someGlobalVar" ) ) . to . be ( "other value" ) ;
143
- if ( typeof navigator !== "undefined" && / M S I E [ 6 - 8 ] \. [ 0 - 9 ] / g. test ( navigator . userAgent ) === false ) {
144
- delete window . someGlobalVar ;
16
+ rewire = require ( "../" ) ;
17
+ coffeeModule = rewire ( "./testModules/module.coffee" ) ;
18
+ coffeeModule . __set__ ( "fs" , {
19
+ readFileSync :function ( ) {
20
+ return "It works!" ;
145
21
}
146
- }
147
- } ) ;
148
- it ( "should not be a problem to have a comment on file end" , function ( ) {
149
- var rewired = rewire ( "./testModules/emptyModule.js" ) ;
150
-
151
- rewired . __set__ ( "someVar" , "hello" ) ;
152
- expect ( rewired . __get__ ( "someVar" ) ) . to . be ( "hello" ) ;
153
- } ) ;
154
- it ( "should not influence the original require if nothing has been required within the rewired module" , function ( ) {
155
- rewire ( "./testModules/emptyModule.js" ) ; // nothing happens here because emptyModule doesn't require anything
156
- expect ( require ( "./testModules/moduleA.js" ) . __set__ ) . to . be ( undefined ) ; // if restoring the original node require didn't worked, the module would have a setter
157
- } ) ;
158
- it ( "subsequent calls of rewire should always return a new instance" , function ( ) {
159
- expect ( rewire ( "./testModules/moduleA.js" ) ) . not . to . be ( rewire ( "./testModules/moduleA.js" ) ) ;
160
- } ) ;
161
- it ( "should preserve the strict mode (not IE)" , function ( ) {
162
- var strictModule = rewire ( "./testModules/strictModule.js" ) ;
163
-
164
- expect ( function ( ) {
165
- strictModule . doSomethingUnstrict ( ) ;
166
- } ) . to . throwException ( checkForTypeError ) ;
167
- } ) ;
168
- it ( "should not modify line numbers in stack traces" , function ( ) {
169
- var throwError = rewire ( "./testModules/throwError.js" ) ;
170
-
171
- try {
172
- throwError ( ) ;
173
- } catch ( err ) {
174
- if ( err . stack ) {
175
- expect ( err . stack . split ( "\n" ) [ 1 ] ) . to . match ( / : 2 : 1 1 / ) ;
176
- }
177
- }
22
+ } ) ;
23
+ expect ( coffeeModule . readFileSync ( ) ) . to . be ( "It works!" ) ;
178
24
} ) ;
179
25
} ) ;