@@ -55,16 +55,23 @@ describe('middleware.runner', () => {
55
55
}
56
56
57
57
executor = {
58
- schedule : ( ) => emitter . emit ( 'run_start' )
58
+ scheduled : false ,
59
+ schedule : ( ) => {
60
+ executor . scheduled = true
61
+ emitter . emit ( 'run_start' )
62
+ if ( executor . onSchedule ) {
63
+ executor . onSchedule ( )
64
+ }
65
+ }
59
66
}
60
67
61
68
emitter = new EventEmitter ( )
62
69
capturedBrowsers = new BrowserCollection ( emitter )
63
70
fileListMock = {
64
- refresh : ( ) => Promise . resolve ( ) ,
65
- addFile : ( ) => null ,
66
- removeFile : ( ) => null ,
67
- changeFile : ( ) => null
71
+ refresh : sinon . stub ( ) ,
72
+ addFile : sinon . stub ( ) ,
73
+ removeFile : sinon . stub ( ) ,
74
+ changeFile : sinon . stub ( )
68
75
}
69
76
70
77
nextSpy = sinon . spy ( )
@@ -82,68 +89,90 @@ describe('middleware.runner', () => {
82
89
sinon . stub ( capturedBrowsers , 'areAllReady' ) . callsFake ( ( ) => true )
83
90
84
91
response . once ( 'end' , ( ) => {
85
- expect ( nextSpy ) . to . not . have . been . called
86
- expect ( response ) . to . beServedAs ( 200 , 'result\x1FEXIT10' )
87
- done ( )
92
+ try {
93
+ expect ( nextSpy ) . to . not . have . been . called
94
+ expect ( response ) . to . beServedAs ( 200 , 'result\x1FEXIT10' )
95
+ done ( )
96
+ } catch ( err ) {
97
+ done ( err )
98
+ }
88
99
} )
89
100
90
101
handler ( new HttpRequestMock ( '/__run__' ) , response , nextSpy )
91
102
92
- mockReporter . write ( 'result' )
93
- emitter . emit ( 'run_complete' , capturedBrowsers , { exitCode : 0 } )
103
+ executor . onSchedule = ( ) => {
104
+ mockReporter . write ( 'result' )
105
+ emitter . emit ( 'run_complete' , capturedBrowsers , { exitCode : 0 } )
106
+ }
94
107
} )
95
108
96
109
it ( 'should set the empty to 0 if empty results' , ( done ) => {
97
110
capturedBrowsers . add ( new Browser ( ) )
98
111
sinon . stub ( capturedBrowsers , 'areAllReady' ) . callsFake ( ( ) => true )
99
112
100
113
response . once ( 'end' , ( ) => {
101
- expect ( nextSpy ) . to . not . have . been . called
102
- expect ( response ) . to . beServedAs ( 200 , 'result\x1FEXIT00' )
103
- done ( )
114
+ try {
115
+ expect ( nextSpy ) . to . not . have . been . called
116
+ expect ( response ) . to . beServedAs ( 200 , 'result\x1FEXIT00' )
117
+ done ( )
118
+ } catch ( err ) {
119
+ done ( err )
120
+ }
104
121
} )
105
122
106
123
handler ( new HttpRequestMock ( '/__run__' ) , response , nextSpy )
107
124
108
- mockReporter . write ( 'result' )
109
- emitter . emit ( 'run_complete' , capturedBrowsers , { exitCode : 0 , success : 0 , failed : 0 } )
125
+ executor . onSchedule = ( ) => {
126
+ mockReporter . write ( 'result' )
127
+ emitter . emit ( 'run_complete' , capturedBrowsers , { exitCode : 0 , success : 0 , failed : 0 } )
128
+ }
110
129
} )
111
130
112
131
it ( 'should set the empty to 1 if successful tests' , ( done ) => {
113
132
capturedBrowsers . add ( new Browser ( ) )
114
133
sinon . stub ( capturedBrowsers , 'areAllReady' ) . callsFake ( ( ) => true )
115
134
116
135
response . once ( 'end' , ( ) => {
117
- expect ( nextSpy ) . to . not . have . been . called
118
- expect ( response ) . to . beServedAs ( 200 , 'result\x1FEXIT10' )
119
- done ( )
136
+ try {
137
+ expect ( nextSpy ) . to . not . have . been . called
138
+ expect ( response ) . to . beServedAs ( 200 , 'result\x1FEXIT10' )
139
+ done ( )
140
+ } catch ( err ) {
141
+ done ( err )
142
+ }
120
143
} )
121
144
122
145
handler ( new HttpRequestMock ( '/__run__' ) , response , nextSpy )
123
146
124
- mockReporter . write ( 'result' )
125
- emitter . emit ( 'run_complete' , capturedBrowsers , { exitCode : 0 , success : 3 , failed : 0 } )
147
+ executor . onSchedule = ( ) => {
148
+ mockReporter . write ( 'result' )
149
+ emitter . emit ( 'run_complete' , capturedBrowsers , { exitCode : 0 , success : 3 , failed : 0 } )
150
+ }
126
151
} )
127
152
128
153
it ( 'should set the empty to 1 if failed tests' , ( done ) => {
129
154
capturedBrowsers . add ( new Browser ( ) )
130
155
sinon . stub ( capturedBrowsers , 'areAllReady' ) . callsFake ( ( ) => true )
131
156
132
157
response . once ( 'end' , ( ) => {
133
- expect ( nextSpy ) . to . not . have . been . called
134
- expect ( response ) . to . beServedAs ( 200 , 'result\x1FEXIT10' )
135
- done ( )
158
+ try {
159
+ expect ( nextSpy ) . to . not . have . been . called
160
+ expect ( response ) . to . beServedAs ( 200 , 'result\x1FEXIT10' )
161
+ done ( )
162
+ } catch ( err ) {
163
+ done ( err )
164
+ }
136
165
} )
137
166
138
167
handler ( new HttpRequestMock ( '/__run__' ) , response , nextSpy )
139
168
140
- mockReporter . write ( 'result' )
141
- emitter . emit ( 'run_complete' , capturedBrowsers , { exitCode : 0 , success : 0 , failed : 6 } )
169
+ executor . onSchedule = ( ) => {
170
+ mockReporter . write ( 'result' )
171
+ emitter . emit ( 'run_complete' , capturedBrowsers , { exitCode : 0 , success : 0 , failed : 6 } )
172
+ }
142
173
} )
143
174
144
175
it ( 'should not run if there is no browser captured' , ( done ) => {
145
- sinon . stub ( fileListMock , 'refresh' )
146
-
147
176
response . once ( 'end' , ( ) => {
148
177
expect ( nextSpy ) . to . not . have . been . called
149
178
expect ( response ) . to . beServedAs ( 200 , 'No captured browser, open http://localhost:8877/\n' )
@@ -156,11 +185,7 @@ describe('middleware.runner', () => {
156
185
157
186
it ( 'should refresh explicit files if specified' , ( done ) => {
158
187
capturedBrowsers . add ( new Browser ( ) )
159
- sinon . stub ( capturedBrowsers , 'areAllReady' ) . callsFake ( ( ) => true )
160
- sinon . stub ( fileListMock , 'refresh' )
161
- sinon . stub ( fileListMock , 'addFile' )
162
- sinon . stub ( fileListMock , 'changeFile' )
163
- sinon . stub ( fileListMock , 'removeFile' )
188
+ sinon . stub ( capturedBrowsers , 'areAllReady' ) . returns ( true )
164
189
165
190
const RAW_MESSAGE = JSON . stringify ( {
166
191
addedFiles : [ '/new.js' ] ,
@@ -178,50 +203,43 @@ describe('middleware.runner', () => {
178
203
request . emit ( 'data' , RAW_MESSAGE )
179
204
request . emit ( 'end' )
180
205
181
- process . nextTick ( ( ) => {
206
+ executor . onSchedule = ( ) => {
182
207
expect ( fileListMock . refresh ) . not . to . have . been . called
183
208
expect ( fileListMock . addFile ) . to . have . been . calledWith ( path . resolve ( '/new.js' ) )
184
209
expect ( fileListMock . removeFile ) . to . have . been . calledWith ( path . resolve ( '/foo.js' ) )
185
210
expect ( fileListMock . removeFile ) . to . have . been . calledWith ( path . resolve ( '/bar.js' ) )
186
211
expect ( fileListMock . changeFile ) . to . have . been . calledWith ( path . resolve ( '/changed.js' ) )
187
212
done ( )
188
- } )
213
+ }
189
214
} )
190
215
191
216
it ( 'should wait for refresh to finish if applicable before scheduling execution' , ( done ) => {
192
217
capturedBrowsers . add ( new Browser ( ) )
193
218
sinon . stub ( capturedBrowsers , 'areAllReady' ) . callsFake ( ( ) => true )
194
219
195
220
let res = null
196
- const fileListPromise = new Promise ( ( resolve , reject ) => {
221
+ const fileListPromise = new Promise ( ( resolve ) => {
197
222
res = resolve
198
223
} )
199
- sinon . stub ( fileListMock , 'refresh' ) . returns ( fileListPromise )
200
- sinon . stub ( executor , 'schedule' )
224
+ fileListMock . refresh . returns ( fileListPromise )
201
225
202
226
const request = new HttpRequestMock ( '/__run__' )
203
227
handler ( request , response , nextSpy )
204
228
205
229
process . nextTick ( ( ) => {
206
230
expect ( fileListMock . refresh ) . to . have . been . called
207
- expect ( executor . schedule ) . to . not . have . been . called
231
+ expect ( executor . scheduled ) . to . be . false
208
232
209
- // Now try resolving the promise
233
+ executor . onSchedule = done
234
+ // Now resolving the promise
210
235
res ( )
211
- setTimeout ( ( ) => {
212
- expect ( executor . schedule ) . to . have . been . called
213
- done ( )
214
- } , 2 )
215
236
} )
216
237
} )
217
238
218
239
it ( 'should schedule execution if no refresh' , ( done ) => {
219
240
capturedBrowsers . add ( new Browser ( ) )
220
241
sinon . stub ( capturedBrowsers , 'areAllReady' ) . callsFake ( ( ) => true )
221
242
222
- sinon . spy ( fileListMock , 'refresh' )
223
- sinon . stub ( executor , 'schedule' )
224
-
225
243
const RAW_MESSAGE = JSON . stringify ( { refresh : false } )
226
244
227
245
const request = new HttpRequestMock ( '/__run__' , {
@@ -234,11 +252,14 @@ describe('middleware.runner', () => {
234
252
request . emit ( 'data' , RAW_MESSAGE )
235
253
request . emit ( 'end' )
236
254
237
- process . nextTick ( ( ) => {
238
- expect ( fileListMock . refresh ) . not . to . have . been . called
239
- expect ( executor . schedule ) . to . have . been . called
240
- done ( )
241
- } )
255
+ executor . onSchedule = ( ) => {
256
+ try {
257
+ expect ( fileListMock . refresh ) . not . to . have . been . called
258
+ done ( )
259
+ } catch ( err ) {
260
+ done ( err )
261
+ }
262
+ }
242
263
} )
243
264
244
265
it ( 'should not schedule execution if refreshing and autoWatch' , ( done ) => {
@@ -247,16 +268,12 @@ describe('middleware.runner', () => {
247
268
capturedBrowsers . add ( new Browser ( ) )
248
269
sinon . stub ( capturedBrowsers , 'areAllReady' ) . callsFake ( ( ) => true )
249
270
250
- sinon . spy ( fileListMock , 'refresh' )
251
- sinon . stub ( executor , 'schedule' )
252
-
253
271
handler ( new HttpRequestMock ( '/__run__' ) , response , nextSpy )
254
272
255
- process . nextTick ( ( ) => {
273
+ executor . onSchedule = ( ) => {
256
274
expect ( fileListMock . refresh ) . to . have . been . called
257
- expect ( executor . schedule ) . not . to . have . been . called
258
275
done ( )
259
- } )
276
+ }
260
277
} )
261
278
262
279
it ( 'should ignore other urls' , ( done ) => {
@@ -265,6 +282,22 @@ describe('middleware.runner', () => {
265
282
done ( )
266
283
} )
267
284
} )
285
+
286
+ it ( 'should scheduleError when file list rejects' , ( done ) => {
287
+ const error = new Error ( 'expected error for testing' )
288
+ capturedBrowsers . add ( new Browser ( ) )
289
+ sinon . stub ( capturedBrowsers , 'areAllReady' ) . returns ( true )
290
+ fileListMock . refresh . rejects ( error )
291
+ handler ( new HttpRequestMock ( '/__run__' ) , response , nextSpy )
292
+ executor . scheduleError = ( errorMessage ) => {
293
+ try {
294
+ expect ( errorMessage ) . eq ( `Error during refresh file list. ${ error . stack } ` )
295
+ done ( )
296
+ } catch ( err ) {
297
+ done ( err )
298
+ }
299
+ }
300
+ } )
268
301
} )
269
302
270
303
describe ( '' , ( ) => {
0 commit comments