Skip to content

Commit e73ad5e

Browse files
test: update
1 parent ce0b509 commit e73ad5e

11 files changed

+690
-277
lines changed

lib/Server.js

Lines changed: 41 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -45,49 +45,6 @@ class Server {
4545
initialize() {
4646
this.applyDevServerPlugin();
4747

48-
const getSocketServerImplementation = () => {
49-
let ServerImplementation;
50-
let ServerImplementationFound = true;
51-
52-
switch (typeof this.options.webSocketServer.type) {
53-
case 'string':
54-
// could be 'sockjs', in the future 'ws', or a path that should be required
55-
if (this.options.webSocketServer.type === 'sockjs') {
56-
ServerImplementation = require('./servers/SockJSServer');
57-
} else if (this.options.webSocketServer.type === 'ws') {
58-
ServerImplementation = require('./servers/WebsocketServer');
59-
} else {
60-
try {
61-
// eslint-disable-next-line import/no-dynamic-require
62-
ServerImplementation = require(this.options.webSocketServer.type);
63-
} catch (e) {
64-
ServerImplementationFound = false;
65-
}
66-
}
67-
break;
68-
case 'function':
69-
// Potentially do more checks here to confirm that the user implemented this properly since errors could be difficult to understand
70-
ServerImplementation = this.options.webSocketServer.type;
71-
break;
72-
default:
73-
ServerImplementationFound = false;
74-
}
75-
76-
if (!ServerImplementationFound) {
77-
throw new Error(
78-
"webSocketServer (webSocketServer.type) must be a string denoting a default implementation (e.g. 'ws', 'sockjs'), a full path to " +
79-
'a JS file which exports a class extending BaseServer (webpack-dev-server/lib/servers/BaseServer.js) ' +
80-
'via require.resolve(...), or the class itself which extends BaseServer'
81-
);
82-
}
83-
84-
return ServerImplementation;
85-
};
86-
87-
this.webSocketServerImplementation = getSocketServerImplementation(
88-
this.options
89-
);
90-
9148
if (this.options.client.progress) {
9249
this.setupProgressPlugin();
9350
}
@@ -675,7 +632,47 @@ class Server {
675632
});
676633
}
677634

635+
getWebSocketServerImplementation() {
636+
let implementation;
637+
let implementationFound = true;
638+
639+
switch (typeof this.options.webSocketServer.type) {
640+
case 'string':
641+
// Could be 'sockjs', in the future 'ws', or a path that should be required
642+
if (this.options.webSocketServer.type === 'sockjs') {
643+
implementation = require('./servers/SockJSServer');
644+
} else if (this.options.webSocketServer.type === 'ws') {
645+
implementation = require('./servers/WebsocketServer');
646+
} else {
647+
try {
648+
// eslint-disable-next-line import/no-dynamic-require
649+
implementation = require(this.options.webSocketServer.type);
650+
} catch (error) {
651+
implementationFound = false;
652+
}
653+
}
654+
break;
655+
case 'function':
656+
implementation = this.options.webSocketServer.type;
657+
break;
658+
default:
659+
implementationFound = false;
660+
}
661+
662+
if (!implementationFound) {
663+
throw new Error(
664+
"webSocketServer (webSocketServer.type) must be a string denoting a default implementation (e.g. 'ws', 'sockjs'), a full path to " +
665+
'a JS file which exports a class extending BaseServer (webpack-dev-server/lib/servers/BaseServer.js) ' +
666+
'via require.resolve(...), or the class itself which extends BaseServer'
667+
);
668+
}
669+
670+
return implementation;
671+
}
672+
678673
createWebSocketServer() {
674+
this.webSocketServerImplementation =
675+
this.getWebSocketServerImplementation();
679676
// eslint-disable-next-line new-cap
680677
this.webSocketServer = new this.webSocketServerImplementation(this);
681678

@@ -857,7 +854,6 @@ class Server {
857854
return colorsEnabled;
858855
};
859856

860-
const useColor = getColorsOption(getCompilerConfigArray(this.compiler));
861857
// TODO change it on https://www.npmjs.com/package/colorette
862858
const colors = {
863859
info(useColor, msg) {
@@ -877,6 +873,7 @@ class Server {
877873
return msg;
878874
},
879875
};
876+
const useColor = getColorsOption(getCompilerConfigArray(this.compiler));
880877

881878
if (this.options.ipc) {
882879
this.logger.info(`Project is running at: "${this.server.address()}"`);

test/e2e/__snapshots__/stats.test.js.snap.webpack4

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,14 @@
11
// Jest Snapshot v1, https://goo.gl/fbAQLP
22

3+
exports[`stats should work and respect the "ignoreWarnings" option 1`] = `
4+
Array [
5+
"[HMR] Waiting for update signal from WDS...",
6+
"Hey.",
7+
"[webpack-dev-server] Hot Module Replacement enabled.",
8+
"[webpack-dev-server] Live Reloading enabled.",
9+
]
10+
`;
11+
312
exports[`stats should work using "{ assets: false }" value for the "stats" option 1`] = `
413
Array [
514
"[HMR] Waiting for update signal from WDS...",
@@ -9,6 +18,15 @@ Array [
918
]
1019
`;
1120

21+
exports[`stats should work using "{ assets: false }" value for the "stats" option 2`] = `
22+
Array [
23+
"[HMR] Waiting for update signal from WDS...",
24+
"Hey.",
25+
"[webpack-dev-server] Hot Module Replacement enabled.",
26+
"[webpack-dev-server] Live Reloading enabled.",
27+
]
28+
`;
29+
1230
exports[`stats should work using "{ warningsFilter: 'test' }" value for the "stats" option 1`] = `
1331
Array [
1432
"[HMR] Waiting for update signal from WDS...",
@@ -53,3 +71,12 @@ Array [
5371
"[webpack-dev-server] Live Reloading enabled.",
5472
]
5573
`;
74+
75+
exports[`stats should work when "stats" is not specified 1`] = `
76+
Array [
77+
"[HMR] Waiting for update signal from WDS...",
78+
"Hey.",
79+
"[webpack-dev-server] Hot Module Replacement enabled.",
80+
"[webpack-dev-server] Live Reloading enabled.",
81+
]
82+
`;

test/e2e/__snapshots__/stats.test.js.snap.webpack5

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,15 @@ Array [
1818
]
1919
`;
2020

21+
exports[`stats should work using "{ assets: false }" value for the "stats" option 2`] = `
22+
Array [
23+
"[HMR] Waiting for update signal from WDS...",
24+
"Hey.",
25+
"[webpack-dev-server] Hot Module Replacement enabled.",
26+
"[webpack-dev-server] Live Reloading enabled.",
27+
]
28+
`;
29+
2130
exports[`stats should work using "{ warningsFilter: 'test' }" value for the "stats" option 1`] = `
2231
Array [
2332
"[HMR] Waiting for update signal from WDS...",
@@ -62,3 +71,12 @@ Array [
6271
"[webpack-dev-server] Live Reloading enabled.",
6372
]
6473
`;
74+
75+
exports[`stats should work when "stats" is not specified 1`] = `
76+
Array [
77+
"[HMR] Waiting for update signal from WDS...",
78+
"Hey.",
79+
"[webpack-dev-server] Hot Module Replacement enabled.",
80+
"[webpack-dev-server] Live Reloading enabled.",
81+
]
82+
`;

test/e2e/__snapshots__/web-socket-server-and-transport.test.js.snap.webpack4

Lines changed: 69 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// Jest Snapshot v1, https://goo.gl/fbAQLP
22

3-
exports[`web socket server and transport should use "sockjs" transport 1`] = `Array []`;
3+
exports[`web socket server and transport should throw an error on wrong path 1`] = `"When you use custom web socket implementation you must explicitly specify client.transport. client.transport must be a string denoting a default implementation (e.g. 'sockjs', 'ws') or a full path to a JS file via require.resolve(...) which exports a class "`;
44

55
exports[`web socket server and transport should use "sockjs" transport and "sockjs" web socket server 1`] = `
66
Array [
@@ -10,7 +10,17 @@ Array [
1010
]
1111
`;
1212

13-
exports[`web socket server and transport should use "ws" transport 1`] = `
13+
exports[`web socket server and transport should use "sockjs" transport, when web socket server is not specify 1`] = `Array []`;
14+
15+
exports[`web socket server and transport should use "sockjs" web socket server when specify "sockjs" value 1`] = `
16+
Array [
17+
"[HMR] Waiting for update signal from WDS...",
18+
"[webpack-dev-server] Hot Module Replacement enabled.",
19+
"[webpack-dev-server] Live Reloading enabled.",
20+
]
21+
`;
22+
23+
exports[`web socket server and transport should use "sockjs" web socket server when specify "sockjs" value using object 1`] = `
1424
Array [
1525
"[HMR] Waiting for update signal from WDS...",
1626
"[webpack-dev-server] Hot Module Replacement enabled.",
@@ -26,6 +36,30 @@ Array [
2636
]
2737
`;
2838

39+
exports[`web socket server and transport should use "ws" transport, when web socket server is not specify 1`] = `
40+
Array [
41+
"[HMR] Waiting for update signal from WDS...",
42+
"[webpack-dev-server] Hot Module Replacement enabled.",
43+
"[webpack-dev-server] Live Reloading enabled.",
44+
]
45+
`;
46+
47+
exports[`web socket server and transport should use "ws" web socket server when specify "ws" value 1`] = `
48+
Array [
49+
"[HMR] Waiting for update signal from WDS...",
50+
"[webpack-dev-server] Hot Module Replacement enabled.",
51+
"[webpack-dev-server] Live Reloading enabled.",
52+
]
53+
`;
54+
55+
exports[`web socket server and transport should use "ws" web socket server when specify "ws" value using object 1`] = `
56+
Array [
57+
"[HMR] Waiting for update signal from WDS...",
58+
"[webpack-dev-server] Hot Module Replacement enabled.",
59+
"[webpack-dev-server] Live Reloading enabled.",
60+
]
61+
`;
62+
2963
exports[`web socket server and transport should use custom transport and "sockjs" web socket server 1`] = `
3064
Array [
3165
"[HMR] Waiting for update signal from WDS...",
@@ -40,7 +74,39 @@ Array [
4074
]
4175
`;
4276

43-
exports[`web socket server and transport should use default transport ("ws") 1`] = `
77+
exports[`web socket server and transport should use custom web socket server when specify class 1`] = `
78+
Array [
79+
"[HMR] Waiting for update signal from WDS...",
80+
"[webpack-dev-server] Hot Module Replacement enabled.",
81+
"[webpack-dev-server] Live Reloading enabled.",
82+
]
83+
`;
84+
85+
exports[`web socket server and transport should use custom web socket server when specify class using object 1`] = `
86+
Array [
87+
"[HMR] Waiting for update signal from WDS...",
88+
"[webpack-dev-server] Hot Module Replacement enabled.",
89+
"[webpack-dev-server] Live Reloading enabled.",
90+
]
91+
`;
92+
93+
exports[`web socket server and transport should use custom web socket server when specify path to class 1`] = `
94+
Array [
95+
"[HMR] Waiting for update signal from WDS...",
96+
"[webpack-dev-server] Hot Module Replacement enabled.",
97+
"[webpack-dev-server] Live Reloading enabled.",
98+
]
99+
`;
100+
101+
exports[`web socket server and transport should use custom web socket server when specify path to class using object 1`] = `
102+
Array [
103+
"[HMR] Waiting for update signal from WDS...",
104+
"[webpack-dev-server] Hot Module Replacement enabled.",
105+
"[webpack-dev-server] Live Reloading enabled.",
106+
]
107+
`;
108+
109+
exports[`web socket server and transport should use default web socket server ("ws") 1`] = `
44110
Array [
45111
"[HMR] Waiting for update signal from WDS...",
46112
"[webpack-dev-server] Hot Module Replacement enabled.",

test/e2e/__snapshots__/web-socket-server-and-transport.test.js.snap.webpack5

Lines changed: 69 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// Jest Snapshot v1, https://goo.gl/fbAQLP
22

3-
exports[`web socket server and transport should use "sockjs" transport 1`] = `Array []`;
3+
exports[`web socket server and transport should throw an error on wrong path 1`] = `"When you use custom web socket implementation you must explicitly specify client.transport. client.transport must be a string denoting a default implementation (e.g. 'sockjs', 'ws') or a full path to a JS file via require.resolve(...) which exports a class "`;
44

55
exports[`web socket server and transport should use "sockjs" transport and "sockjs" web socket server 1`] = `
66
Array [
@@ -10,7 +10,17 @@ Array [
1010
]
1111
`;
1212

13-
exports[`web socket server and transport should use "ws" transport 1`] = `
13+
exports[`web socket server and transport should use "sockjs" transport, when web socket server is not specify 1`] = `Array []`;
14+
15+
exports[`web socket server and transport should use "sockjs" web socket server when specify "sockjs" value 1`] = `
16+
Array [
17+
"[HMR] Waiting for update signal from WDS...",
18+
"[webpack-dev-server] Hot Module Replacement enabled.",
19+
"[webpack-dev-server] Live Reloading enabled.",
20+
]
21+
`;
22+
23+
exports[`web socket server and transport should use "sockjs" web socket server when specify "sockjs" value using object 1`] = `
1424
Array [
1525
"[HMR] Waiting for update signal from WDS...",
1626
"[webpack-dev-server] Hot Module Replacement enabled.",
@@ -26,6 +36,30 @@ Array [
2636
]
2737
`;
2838

39+
exports[`web socket server and transport should use "ws" transport, when web socket server is not specify 1`] = `
40+
Array [
41+
"[HMR] Waiting for update signal from WDS...",
42+
"[webpack-dev-server] Hot Module Replacement enabled.",
43+
"[webpack-dev-server] Live Reloading enabled.",
44+
]
45+
`;
46+
47+
exports[`web socket server and transport should use "ws" web socket server when specify "ws" value 1`] = `
48+
Array [
49+
"[HMR] Waiting for update signal from WDS...",
50+
"[webpack-dev-server] Hot Module Replacement enabled.",
51+
"[webpack-dev-server] Live Reloading enabled.",
52+
]
53+
`;
54+
55+
exports[`web socket server and transport should use "ws" web socket server when specify "ws" value using object 1`] = `
56+
Array [
57+
"[HMR] Waiting for update signal from WDS...",
58+
"[webpack-dev-server] Hot Module Replacement enabled.",
59+
"[webpack-dev-server] Live Reloading enabled.",
60+
]
61+
`;
62+
2963
exports[`web socket server and transport should use custom transport and "sockjs" web socket server 1`] = `
3064
Array [
3165
"[HMR] Waiting for update signal from WDS...",
@@ -40,7 +74,39 @@ Array [
4074
]
4175
`;
4276

43-
exports[`web socket server and transport should use default transport ("ws") 1`] = `
77+
exports[`web socket server and transport should use custom web socket server when specify class 1`] = `
78+
Array [
79+
"[HMR] Waiting for update signal from WDS...",
80+
"[webpack-dev-server] Hot Module Replacement enabled.",
81+
"[webpack-dev-server] Live Reloading enabled.",
82+
]
83+
`;
84+
85+
exports[`web socket server and transport should use custom web socket server when specify class using object 1`] = `
86+
Array [
87+
"[HMR] Waiting for update signal from WDS...",
88+
"[webpack-dev-server] Hot Module Replacement enabled.",
89+
"[webpack-dev-server] Live Reloading enabled.",
90+
]
91+
`;
92+
93+
exports[`web socket server and transport should use custom web socket server when specify path to class 1`] = `
94+
Array [
95+
"[HMR] Waiting for update signal from WDS...",
96+
"[webpack-dev-server] Hot Module Replacement enabled.",
97+
"[webpack-dev-server] Live Reloading enabled.",
98+
]
99+
`;
100+
101+
exports[`web socket server and transport should use custom web socket server when specify path to class using object 1`] = `
102+
Array [
103+
"[HMR] Waiting for update signal from WDS...",
104+
"[webpack-dev-server] Hot Module Replacement enabled.",
105+
"[webpack-dev-server] Live Reloading enabled.",
106+
]
107+
`;
108+
109+
exports[`web socket server and transport should use default web socket server ("ws") 1`] = `
44110
Array [
45111
"[HMR] Waiting for update signal from WDS...",
46112
"[webpack-dev-server] Hot Module Replacement enabled.",

0 commit comments

Comments
 (0)