-
-
Notifications
You must be signed in to change notification settings - Fork 1.5k
/
Copy pathServer.test.js
145 lines (120 loc) · 3.64 KB
/
Server.test.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
'use strict';
const webpack = require('webpack');
const Server = require('../lib/Server');
const config = require('./fixtures/simple-config/webpack.config');
const allStats = [
{},
// eslint-disable-next-line no-undefined
undefined,
false,
'errors-only',
{
assets: false,
},
];
describe('Server', () => {
// issue: https://github.com/webpack/webpack-dev-server/issues/1724
describe('express.static.mine.types', () => {
beforeEach(() => {
jest.resetModules();
});
afterEach(() => {
jest.unmock('express');
});
it("should success even if mine.types doesn't exist", () => {
// eslint-disable-next-line
const Server = require('../lib/Server');
jest.mock('express', () => {
const data = jest.requireActual('express');
const { static: st } = data;
const { mime } = st;
delete mime.types;
expect(typeof mime.types).toEqual('undefined');
return Object.assign(data, {
static: Object.assign(st, {
mime,
}),
});
});
return new Promise((res) => {
const compiler = webpack(config);
const server = new Server(compiler);
compiler.hooks.done.tap('webpack-dev-server', (s) => {
const output = server.getStats(s);
expect(output.errors.length).toEqual(0);
server.close(() => {
res();
});
});
compiler.run(() => {});
server.listen(8080, 'localhost');
});
});
});
it('should cascade warningsFilter', () => {
const stats = { warningsFilter: 'test' };
return new Promise((res) => {
const compiler = webpack(config);
const server = new Server(compiler, { stats });
compiler.hooks.done.tap('webpack-dev-server', (s) => {
s.compilation.warnings = ['test', 'another warning'];
const output = server.getStats(s);
expect(output.warnings.length).toBe(1);
expect(output.warnings[0]).toBe('another warning');
server.close(() => {
res();
});
});
compiler.run(() => {});
server.listen(8080, 'localhost');
});
});
it(`should cascade stats options`, () => {
return new Promise((resolve, reject) => {
(function iterate(stats, i) {
if (i === allStats.length) {
return resolve();
}
const prom = new Promise((res, rej) => {
const compiler = webpack(config);
const server = new Server(compiler, { stats });
compiler.hooks.done.tap('webpack-dev-server', (s) => {
const finalStats = JSON.stringify(server.getStats(s));
const defaultStats = JSON.stringify(
server._stats.toJson(Server.DEFAULT_STATS)
);
// If we're not over-riding stats configuration,
// we get the same result as the DEFAULT_STATS
if (!stats || !Object.keys(stats).length) {
try {
expect(finalStats).toBe(defaultStats);
} catch (e) {
rej(e);
}
} else {
try {
expect(finalStats).not.toBe(defaultStats);
} catch (e) {
rej(e);
}
}
server.close(() => {
res();
});
});
compiler.run(() => {});
server.listen(8080, 'localhost');
});
// Iterate to cover each case.
prom
.then(() => {
i += 1;
iterate(allStats[i], i);
})
.catch((e) => {
reject(e);
});
})(allStats[0], 0);
});
});
});