Skip to content

Commit 5f13e11

Browse files
authored
fix(server): Simplify 'dom' inclusion. (karma-runner#3356)
The karma preprocessor caches file content: no need to read it async in the server loop.
1 parent 817fbbd commit 5f13e11

File tree

4 files changed

+7
-66
lines changed

4 files changed

+7
-66
lines changed

lib/middleware/karma.js

+1-16
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,6 @@ function createKarmaMiddleware (
6666
filesPromise,
6767
serveStaticFile,
6868
serveFile,
69-
readFilePromise,
7069
injector,
7170
basePath,
7271
urlRoot,
@@ -136,21 +135,8 @@ function createKarmaMiddleware (
136135
const isRequestingContextFile = requestUrl === '/context.html'
137136
const isRequestingDebugFile = requestUrl === '/debug.html'
138137
const isRequestingClientContextFile = requestUrl === '/client_with_context.html'
139-
const includedContent = new Map() // file.path -> content
140138
if (isRequestingContextFile || isRequestingDebugFile || isRequestingClientContextFile) {
141139
return filesPromise.then((files) => {
142-
// Read any files.included that will be directly written into HTML before HTML is read.
143-
const contentReads = []
144-
for (const file of files.included) {
145-
const fileType = file.type || path.extname(file.path).substring(1)
146-
if (fileType === 'dom') {
147-
contentReads.push(
148-
readFilePromise(file.path).then((content) => includedContent.set(file.path, content))
149-
)
150-
}
151-
}
152-
return Promise.all(contentReads).then(() => files)
153-
}).then(function (files) {
154140
let fileServer
155141
let requestedFileUrl
156142
log.debug('custom files', customContextFile, customDebugFile, customClientContextFile)
@@ -195,7 +181,7 @@ function createKarmaMiddleware (
195181
if (fileType === 'css') {
196182
scriptTags.push(`<link type="text/css" href="${filePath}" rel="stylesheet">`)
197183
} else if (fileType === 'dom') {
198-
scriptTags.push(includedContent.get(file.path))
184+
scriptTags.push(file.content)
199185
} else if (fileType === 'html') {
200186
scriptTags.push(`<link href="${filePath}" rel="import">`)
201187
} else {
@@ -253,7 +239,6 @@ createKarmaMiddleware.$inject = [
253239
'filesPromise',
254240
'serveStaticFile',
255241
'serveFile',
256-
'readFilePromise',
257242
'injector',
258243
'config.basePath',
259244
'config.urlRoot',

lib/web-server.js

+1-21
Original file line numberDiff line numberDiff line change
@@ -39,25 +39,6 @@ function createFilesPromise (emitter, fileList) {
3939
return filesPromise
4040
}
4141

42-
// Bind the filesystem into the injectable file reader function
43-
function createReadFilePromise () {
44-
return (filepath) => {
45-
return new Promise((resolve, reject) => {
46-
fs.readFile(filepath, 'utf8', function (error, data) {
47-
if (error) {
48-
reject(new Error(`Cannot read ${filepath}, got: ${error}`))
49-
} else if (!data) {
50-
reject(new Error(`No content at ${filepath}`))
51-
} else {
52-
resolve(data.split('\n'))
53-
}
54-
})
55-
})
56-
}
57-
}
58-
59-
createReadFilePromise.$inject = []
60-
6142
function createServeStaticFile (config) {
6243
return common.createServeFile(fs, path.normalize(path.join(__dirname, '/../static')), config)
6344
}
@@ -124,6 +105,5 @@ module.exports = {
124105
createWebServer,
125106
createServeFile,
126107
createServeStaticFile,
127-
createFilesPromise,
128-
createReadFilePromise
108+
createFilesPromise
129109
}

test/unit/middleware/karma.spec.js

+5-26
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,15 @@ const HttpRequestMock = mocks.http.ServerRequest
1212

1313
describe('middleware.karma', () => {
1414
let serveFile
15-
let readFilesDeferred
1615
let filesDeferred
1716
let nextSpy
1817
let response
1918

2019
class MockFile extends File {
21-
constructor (path, sha, type) {
20+
constructor (path, sha, type, content) {
2221
super(path, undefined, undefined, type)
2322
this.sha = sha || 'sha-default'
23+
this.content = content
2424
}
2525
}
2626

@@ -64,7 +64,6 @@ describe('middleware.karma', () => {
6464
filesDeferred.promise,
6565
serveFile,
6666
null,
67-
null,
6867
injector,
6968
'/base/path',
7069
'/__karma__/',
@@ -121,12 +120,10 @@ describe('middleware.karma', () => {
121120
})
122121

123122
it('should serve client.html', (done) => {
124-
readFilesDeferred = helper.defer()
125123
handler = createKarmaMiddleware(
126124
null,
127125
serveFile,
128126
null,
129-
readFilesDeferred.promise,
130127
injector,
131128
'/base',
132129
'/'
@@ -142,12 +139,10 @@ describe('middleware.karma', () => {
142139
})
143140

144141
it('should serve /?id=xxx', (done) => {
145-
readFilesDeferred = helper.defer()
146142
handler = createKarmaMiddleware(
147143
null,
148144
serveFile,
149145
null,
150-
readFilesDeferred.promise,
151146
injector,
152147
'/base',
153148
'/'
@@ -163,13 +158,10 @@ describe('middleware.karma', () => {
163158
})
164159

165160
it('should serve /?x-ua-compatible with replaced values', (done) => {
166-
readFilesDeferred = helper.defer()
167-
168161
handler = createKarmaMiddleware(
169162
null,
170163
serveFile,
171164
null,
172-
readFilesDeferred.promise,
173165
injector,
174166
'/base',
175167
'/'
@@ -278,31 +270,20 @@ describe('middleware.karma', () => {
278270
})
279271

280272
it('should serve context.html with included DOM content', (done) => {
281-
const readFilePromise = (path) => {
282-
const cases = {
283-
'/some/abc/a.dom': 'a',
284-
'/some/abc/b_test_dom.html': 'b',
285-
'/some/abc/c': 'c',
286-
'/some/abc/d_test_dom.html': 'd'
287-
}
288-
return Promise.resolve(cases[path] || '?unknown ' + path)
289-
}
290-
291273
filesDeferred = helper.defer()
292274
handler = createKarmaMiddleware(
293275
filesDeferred.promise,
294276
serveFile,
295277
null,
296-
readFilePromise,
297278
injector,
298279
'/base',
299280
'/'
300281
)
301282

302283
includedFiles([
303-
new MockFile('/some/abc/a.dom', 'sha1'),
304-
new MockFile('/some/abc/b_test_dom.html', 'sha2', 'dom'),
305-
new MockFile('/some/abc/c', 'sha3', 'dom')
284+
new MockFile('/some/abc/a.dom', 'sha1', undefined, 'a'),
285+
new MockFile('/some/abc/b_test_dom.html', 'sha2', 'dom', 'b'),
286+
new MockFile('/some/abc/c', 'sha3', 'dom', 'c')
306287
])
307288

308289
response.once('end', () => {
@@ -468,12 +449,10 @@ describe('middleware.karma', () => {
468449

469450
it('should update handle updated configs', (done) => {
470451
let i = 0
471-
readFilesDeferred = helper.defer()
472452
handler = createKarmaMiddleware(
473453
filesDeferred.promise,
474454
serveFile,
475455
null,
476-
readFilesDeferred.promise,
477456
{
478457
get (val) {
479458
if (val === 'config.client') {

test/unit/web-server.spec.js

-3
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,6 @@ describe('web-server', () => {
6363
filesPromise: ['factory', m.createFilesPromise],
6464
serveStaticFile: ['factory', m.createServeStaticFile],
6565
serveFile: ['factory', m.createServeFile],
66-
readFilePromise: ['factory', m.createReadFilePromise],
6766
capturedBrowsers: ['value', null],
6867
reporter: ['value', null],
6968
executor: ['value', null],
@@ -233,7 +232,6 @@ describe('web-server', () => {
233232
filesPromise: ['factory', m.createFilesPromise],
234233
serveStaticFile: ['factory', m.createServeStaticFile],
235234
serveFile: ['factory', m.createServeFile],
236-
readFilePromise: ['factory', m.createReadFilePromise],
237235
capturedBrowsers: ['value', null],
238236
reporter: ['value', null],
239237
executor: ['value', null],
@@ -278,7 +276,6 @@ describe('web-server', () => {
278276
filesPromise: ['factory', m.createFilesPromise],
279277
serveStaticFile: ['factory', m.createServeStaticFile],
280278
serveFile: ['factory', m.createServeFile],
281-
readFilePromise: ['factory', m.createReadFilePromise],
282279
capturedBrowsers: ['value', null],
283280
reporter: ['value', null],
284281
executor: ['value', null],

0 commit comments

Comments
 (0)