11'use strict' ;
22
33const { relative, sep } = require ( 'path' ) ;
4- const webpack = require ( 'webpack' ) ;
54const request = require ( 'supertest' ) ;
65// Mock opn before loading Server
76jest . mock ( 'opn' ) ;
@@ -12,66 +11,62 @@ opn.mockImplementation(() => {
1211 catch : jest . fn ( ) ,
1312 } ;
1413} ) ;
15- const Server = require ( '../lib/Server' ) ;
14+ jest . mock ( 'sockjs/lib/transport' ) ;
15+ // eslint-disable-next-line import/newline-after-import
16+ const sockjs = require ( 'sockjs/lib/transport' ) ;
1617const config = require ( './fixtures/simple-config/webpack.config' ) ;
1718const testServer = require ( './helpers/test-server' ) ;
1819
1920describe ( 'Server' , ( ) => {
21+ describe ( 'sockjs' , ( ) => {
22+ it ( 'add decorateConnection' , ( ) => {
23+ expect ( typeof sockjs . Session . prototype . decorateConnection ) . toEqual (
24+ 'function'
25+ ) ;
26+ } ) ;
27+ } ) ;
28+
2029 describe ( 'addEntries' , ( ) => {
21- it ( 'add hot option' , ( ) => {
22- return new Promise ( ( res ) => {
23- // eslint-disable-next-line
24- const Server = require ( '../lib/Server' ) ;
25- const compiler = webpack ( config ) ;
26- const server = new Server ( compiler , {
27- hot : true ,
28- } ) ;
30+ it ( 'add hot option' , ( done ) => {
31+ const { compiler, server } = testServer . startFullSetup ( config , {
32+ hot : true ,
33+ } ) ;
2934
30- expect (
31- server . middleware . context . compiler . options . entry . map ( ( p ) => {
32- return relative ( '.' , p ) . split ( sep ) ;
33- } )
34- ) . toMatchSnapshot ( ) ;
35- expect (
36- server . middleware . context . compiler . options . plugins
37- ) . toMatchSnapshot ( ) ;
38-
39- compiler . hooks . done . tap ( 'webpack-dev-server' , ( ) => {
40- server . close ( ( ) => {
41- res ( ) ;
42- } ) ;
43- } ) ;
35+ expect (
36+ server . middleware . context . compiler . options . entry . map ( ( p ) => {
37+ return relative ( '.' , p ) . split ( sep ) ;
38+ } )
39+ ) . toMatchSnapshot ( ) ;
40+ expect (
41+ server . middleware . context . compiler . options . plugins
42+ ) . toMatchSnapshot ( ) ;
4443
45- compiler . run ( ( ) => { } ) ;
44+ compiler . hooks . done . tap ( 'webpack-dev-server' , ( ) => {
45+ testServer . close ( done ) ;
4646 } ) ;
47+
48+ compiler . run ( ( ) => { } ) ;
4749 } ) ;
4850
49- it ( 'add hotOnly option' , ( ) => {
50- return new Promise ( ( res ) => {
51- // eslint-disable-next-line
52- const Server = require ( '../lib/Server' ) ;
53- const compiler = webpack ( config ) ;
54- const server = new Server ( compiler , {
55- hotOnly : true ,
56- } ) ;
51+ it ( 'add hotOnly option' , ( done ) => {
52+ const { compiler, server } = testServer . startFullSetup ( config , {
53+ hotOnly : true ,
54+ } ) ;
5755
58- expect (
59- server . middleware . context . compiler . options . entry . map ( ( p ) => {
60- return relative ( '.' , p ) . split ( sep ) ;
61- } )
62- ) . toMatchSnapshot ( ) ;
63- expect (
64- server . middleware . context . compiler . options . plugins
65- ) . toMatchSnapshot ( ) ;
66-
67- compiler . hooks . done . tap ( 'webpack-dev-server' , ( ) => {
68- server . close ( ( ) => {
69- res ( ) ;
70- } ) ;
71- } ) ;
56+ expect (
57+ server . middleware . context . compiler . options . entry . map ( ( p ) => {
58+ return relative ( '.' , p ) . split ( sep ) ;
59+ } )
60+ ) . toMatchSnapshot ( ) ;
61+ expect (
62+ server . middleware . context . compiler . options . plugins
63+ ) . toMatchSnapshot ( ) ;
7264
73- compiler . run ( ( ) => { } ) ;
65+ compiler . hooks . done . tap ( 'webpack-dev-server' , ( ) => {
66+ testServer . close ( done ) ;
7467 } ) ;
68+
69+ compiler . run ( ( ) => { } ) ;
7570 } ) ;
7671 } ) ;
7772
@@ -85,10 +80,7 @@ describe('Server', () => {
8580 jest . unmock ( 'express' ) ;
8681 } ) ;
8782
88- it ( "should success even if mine.types doesn't exist" , ( ) => {
89- // eslint-disable-next-line
90- const Server = require ( '../lib/Server' ) ;
91-
83+ it ( "should success even if mine.types doesn't exist" , ( done ) => {
9284 jest . mock ( 'express' , ( ) => {
9385 const data = jest . requireActual ( 'express' ) ;
9486 const { static : st } = data ;
@@ -105,22 +97,17 @@ describe('Server', () => {
10597 } ) ;
10698 } ) ;
10799
108- return new Promise ( ( res ) => {
109- const compiler = webpack ( config ) ;
110- const server = new Server ( compiler ) ;
111-
112- compiler . hooks . done . tap ( 'webpack-dev-server' , ( s ) => {
113- const output = server . getStats ( s ) ;
114- expect ( output . errors . length ) . toEqual ( 0 ) ;
100+ const { compiler, server } = testServer . startFullSetup ( config , { } ) ;
115101
116- server . close ( ( ) => {
117- res ( ) ;
118- } ) ;
119- } ) ;
102+ compiler . hooks . done . tap ( 'webpack-dev-server' , ( s ) => {
103+ const output = server . getStats ( s ) ;
104+ expect ( output . errors . length ) . toEqual ( 0 ) ;
120105
121- compiler . run ( ( ) => { } ) ;
122- server . listen ( 8080 , 'localhost' ) ;
106+ testServer . close ( done ) ;
123107 } ) ;
108+
109+ compiler . run ( ( ) => { } ) ;
110+ server . listen ( 8080 , 'localhost' ) ;
124111 } ) ;
125112 } ) ;
126113
@@ -137,86 +124,62 @@ describe('Server', () => {
137124 } ,
138125 ] ;
139126
140- return new Promise ( ( resolve , reject ) => {
141- ( function iterate ( stats , i ) {
142- if ( i === allStats . length ) {
143- return resolve ( ) ;
144- }
145-
146- // Iterate to cover each case.
147- Promise . resolve ( )
148- . then (
149- ( ) =>
150- new Promise ( ( res ) => {
151- const compiler = webpack ( config ) ;
152- const server = new Server ( compiler , { stats } ) ;
153-
154- compiler . hooks . done . tap ( 'webpack-dev-server' , ( s ) => {
155- expect ( Object . keys ( server . getStats ( s ) ) ) . toMatchSnapshot ( ) ;
156-
157- server . close ( ( ) => {
158- res ( ) ;
159- } ) ;
160- } ) ;
161-
162- compiler . run ( ( ) => { } ) ;
163- server . listen ( 8080 , 'localhost' ) ;
164- } )
165- )
166- . then ( ( ) => {
167- i += 1 ;
168- iterate ( allStats [ i ] , i ) ;
169- } )
170- . catch ( ( e ) => {
171- reject ( e ) ;
127+ return allStats . reduce ( ( p , stats ) => {
128+ return p . then ( ( ) => {
129+ return new Promise ( ( resolve ) => {
130+ const { compiler, server } = testServer . startFullSetup ( config , {
131+ stats,
172132 } ) ;
173- } ) ( allStats [ 0 ] , 0 ) ;
174- } ) ;
175- } ) ;
176133
177- it ( 'should respect warningsFilter' , ( ) => {
178- return new Promise ( ( res ) => {
179- const compiler = webpack ( config ) ;
180- const server = new Server ( compiler , {
181- stats : { warningsFilter : 'test' } ,
134+ compiler . hooks . done . tap ( 'webpack-dev-server' , ( s ) => {
135+ expect ( Object . keys ( server . getStats ( s ) ) ) . toMatchSnapshot ( ) ;
136+
137+ testServer . close ( resolve ) ;
138+ } ) ;
139+
140+ compiler . run ( ( ) => { } ) ;
141+ server . listen ( 8080 , 'localhost' ) ;
142+ } ) ;
182143 } ) ;
144+ } , Promise . resolve ( ) ) ;
145+ } ) ;
183146
184- compiler . hooks . done . tap ( 'webpack-dev-server' , ( s ) => {
185- s . compilation . warnings = [ 'test' , 'another warning' ] ;
147+ it ( 'should respect warningsFilter' , ( done ) => {
148+ const { compiler, server } = testServer . startFullSetup ( config , {
149+ stats : { warningsFilter : 'test' } ,
150+ } ) ;
186151
187- const output = server . getStats ( s ) ;
152+ compiler . hooks . done . tap ( 'webpack-dev-server' , ( s ) => {
153+ s . compilation . warnings = [ 'test' , 'another warning' ] ;
188154
189- expect ( output . warnings . length ) . toBe ( 1 ) ;
190- expect ( output . warnings [ 0 ] ) . toBe ( 'another warning' ) ;
155+ const output = server . getStats ( s ) ;
191156
192- server . close ( ( ) => {
193- res ( ) ;
194- } ) ;
195- } ) ;
157+ expect ( output . warnings . length ) . toBe ( 1 ) ;
158+ expect ( output . warnings [ 0 ] ) . toBe ( 'another warning' ) ;
196159
197- compiler . run ( ( ) => { } ) ;
198- server . listen ( 8080 , 'localhost' ) ;
160+ testServer . close ( done ) ;
199161 } ) ;
200- } ) ;
201162
202- it ( 'should open' , ( ) => {
203- return new Promise ( ( res ) => {
204- const compiler = webpack ( config ) ;
205- const server = new Server ( compiler , {
206- open : true ,
207- } ) ;
163+ compiler . run ( ( ) => { } ) ;
164+ server . listen ( 8080 , 'localhost' ) ;
165+ } ) ;
208166
209- compiler . hooks . done . tap ( 'webpack-dev-server' , ( ) => {
210- expect ( opn . mock . calls [ 0 ] ) . toEqual ( [ 'http://localhost:8080/' , { } ] ) ;
211- expect ( opn . mock . invocationCallOrder [ 0 ] ) . toEqual ( 1 ) ;
212- server . close ( ( ) => {
213- res ( ) ;
214- } ) ;
215- } ) ;
167+ it ( 'should open' , ( done ) => {
168+ const { compiler, server } = testServer . startFullSetup ( config , {
169+ open : true ,
170+ } ) ;
216171
217- compiler . run ( ( ) => { } ) ;
218- server . listen ( 8080 , 'localhost' ) ;
172+ compiler . hooks . done . tap ( 'webpack-dev-server' , ( ) => {
173+ expect ( opn . mock . calls [ 0 ] ) . toEqual ( [
174+ 'http://localhost:8080/webpack-dev-server/' ,
175+ { } ,
176+ ] ) ;
177+ expect ( opn . mock . invocationCallOrder [ 0 ] ) . toEqual ( 1 ) ;
178+ testServer . close ( done ) ;
219179 } ) ;
180+
181+ compiler . run ( ( ) => { } ) ;
182+ server . listen ( 8080 , 'localhost' ) ;
220183 } ) ;
221184 } ) ;
222185
0 commit comments