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- var path = require ( "path" ) ,
6- expect = require ( "expect.js" ) ,
7- rewire = require ( "../" ) ;
5+ var expect = require ( "expect.js" ) ;
86
9- function checkForTypeError ( err ) {
10- expect ( err . constructor ) . to . be ( TypeError ) ;
11- }
7+ var rewire ;
128
139describe ( "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" ) ;
1912 } ) ;
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 ;
2315
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!" ;
14521 }
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!" ) ;
17824 } ) ;
17925} ) ;
0 commit comments