Skip to content

Commit 892fa89

Browse files
fix(web-server): Ensure filesPromise is always resolvable
Closes #1544
1 parent 184f12e commit 892fa89

4 files changed

Lines changed: 23 additions & 6 deletions

File tree

lib/file-list.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -221,14 +221,14 @@ Object.defineProperty(List.prototype, 'files', {
221221
return pattern.served
222222
})
223223
.map(function (p) {
224-
return from(self.buckets.get(p.pattern)).sort(byPath)
224+
return from(self.buckets.get(p.pattern) || []).sort(byPath)
225225
})
226226

227227
var included = this._patterns.filter(function (pattern) {
228228
return pattern.included
229229
})
230230
.map(function (p) {
231-
return from(self.buckets.get(p.pattern)).sort(byPath)
231+
return from(self.buckets.get(p.pattern) || []).sort(byPath)
232232
})
233233

234234
var uniqFlat = function (list) {

lib/middleware/common.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ var PromiseContainer = function () {
99
var promise
1010

1111
this.then = function (success, error) {
12-
return promise.then(success, error)
12+
return promise.then(success).catch(error)
1313
}
1414

1515
this.set = function (newPromise) {

lib/web-server.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,16 @@ var createCustomHandler = function (customFileHandlers, /* config.basePath */ ba
2929

3030
createCustomHandler.$inject = ['customFileHandlers', 'config.basePath']
3131

32-
var createWebServer = function (injector, emitter) {
32+
var createWebServer = function (injector, emitter, fileList) {
3333
var config = injector.get('config')
3434
var serveStaticFile = common.createServeFile(fs, path.normalize(__dirname + '/../static'))
3535
var serveFile = common.createServeFile(fs)
3636
var filesPromise = new common.PromiseContainer()
3737

38+
// Set an empty list of files to avoid race issues with
39+
// file_list_modified not having been emitted yet
40+
filesPromise.set(Promise.resolve(fileList.files))
41+
3842
emitter.on('file_list_modified', function (files) {
3943
filesPromise.set(Promise.resolve(files))
4044
})

test/unit/web-server.spec.js

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ describe('web-server', () => {
4747
config: ['value', {basePath: '/base/path', urlRoot: '/'}],
4848
customFileHandlers: ['value', customFileHandlers],
4949
emitter: ['value', emitter],
50-
fileList: ['value', null],
50+
fileList: ['value', {files: {served: [], included: []}}],
5151
capturedBrowsers: ['value', null],
5252
reporter: ['value', null],
5353
executor: ['value', null],
@@ -82,6 +82,19 @@ describe('web-server', () => {
8282
.expect(200, 'new-js-source')
8383
})
8484

85+
it('should serve no files when they are not available yet', () => {
86+
return request(server)
87+
.get('/base/new.js')
88+
.expect(404)
89+
.then(() => {
90+
servedFiles(new Set([new File('/base/path/new.js')]))
91+
92+
return request(server)
93+
.get('/base/new.js')
94+
.expect(200, 'new-js-source')
95+
})
96+
})
97+
8598
it('should load custom handlers', () => {
8699
servedFiles(new Set())
87100

@@ -125,7 +138,7 @@ describe('web-server', () => {
125138
config: ['value', {basePath: '/base/path', urlRoot: '/', protocol: 'https:', httpsServerOptions: credentials}],
126139
customFileHandlers: ['value', customFileHandlers],
127140
emitter: ['value', emitter],
128-
fileList: ['value', null],
141+
fileList: ['value', {files: {served: [], included: []}}],
129142
capturedBrowsers: ['value', null],
130143
reporter: ['value', null],
131144
executor: ['value', null],

0 commit comments

Comments
 (0)