Skip to content

Commit d2abeaa

Browse files
committed
test(cli): add snapshot tests
1 parent 0ab7237 commit d2abeaa

File tree

3 files changed

+148
-7
lines changed

3 files changed

+148
-7
lines changed
+91
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
// Jest Snapshot v1, https://goo.gl/fbAQLP
2+
3+
exports[`CLI --hot webpack 4 1`] = `
4+
"<i> [webpack-dev-server] Project is running at http://localhost:8080/
5+
<i> [webpack-dev-middleware] Hash: X
6+
<i> Version: webpack x.x.x Time: Xms
7+
<i> Built at: Thu Jan 01 1970 <CLR=BOLD>00:00:00</CLR> GMT
8+
<i> Asset Size Chunks Chunk Names
9+
<i> main.js X KiB main [emitted] main
10+
<i> Entrypoint main = main.js
11+
<i> [0] multi Xdir/client/default?http://localhost (webpack)/hot/dev-server.js ./foo.js X bytes {main} [built]
12+
<i> [../../../client/default/index.js?http://localhost] Xdir/client/default?http://localhost X KiB {main} [built]
13+
<i> [../../../client/default/overlay.js] Xdir/client/default/overlay.js X KiB {main} [built]
14+
<i> [../../../client/default/socket.js] Xdir/client/default/socket.js X KiB {main} [built]
15+
<i> [../../../client/default/utils/createSocketUrl.js] Xdir/client/default/utils/createSocketUrl.js X KiB {main} [built]
16+
<i> [../../../client/default/utils/log.js] Xdir/client/default/utils/log.js X bytes {main} [built]
17+
<i> [../../../client/default/utils/reloadApp.js] Xdir/client/default/utils/reloadApp.js X KiB {main} [built]
18+
<i> [../../../client/default/utils/sendMessage.js] Xdir/client/default/utils/sendMessage.js X bytes {main} [built]
19+
<i> [../../../client/transpiled-modules/strip-ansi.js] Xdir/client/transpiled-modules/strip-ansi.js X KiB {main} [built]
20+
<i> [../../../node_modules/webpack/hot sync ^\\\\.\\\\/log$] (webpack)/hot sync nonrecursive ^\\\\.\\\\/log$ X bytes {main} [built]
21+
<i> [../../../node_modules/webpack/hot/dev-server.js] (webpack)/hot/dev-server.js X KiB {main} [built]
22+
<i> [../../../node_modules/webpack/hot/emitter.js] (webpack)/hot/emitter.js X bytes {main} [built]
23+
<i> [../../../node_modules/webpack/hot/log-apply-result.js] (webpack)/hot/log-apply-result.js X KiB {main} [built]
24+
<i> [../../../node_modules/webpack/hot/log.js] (webpack)/hot/log.js X KiB {main} [built]
25+
<i> [./foo.js] X bytes {main} [built]
26+
<i> + 18 hidden modules
27+
<i> [webpack-dev-middleware] Compiled successfully."
28+
`;
29+
30+
exports[`CLI --hot webpack 5 1`] = `
31+
"<i> [webpack-dev-server] Project is running at http://localhost:8080/
32+
<i> [webpack-dev-middleware] asset main.js X KiB [emitted] (name: main)
33+
<i> runtime modules X KiB 10 modules
34+
<i> cacheable modules X KiB
35+
<i> modules by path ../../../node_modules/ X KiB 16 modules
36+
<i> modules by path ../../../client/ X KiB
37+
<i> modules by path ../../../client/default/ X KiB 8 modules
38+
<i> modules by path ../../../client/transpiled-modules/*.js X KiB 2 modules
39+
<i> modules by path ../../../client/clients/*.js X KiB
40+
<i> ../../../client/clients/WebsocketClient.js X KiB [built] [code generated]
41+
<i> ../../../client/clients/BaseClient.js X KiB [built] [code generated]
42+
<i> ./foo.js X bytes [built] [code generated]
43+
<i> ../../../node_modules/webpack/hot/ sync nonrecursive ^\\\\.\\\\/log$ X bytes [built] [code generated]
44+
<i> webpack x.x.x compiled successfully in X ms
45+
<i> [webpack-dev-middleware] Compiled successfully."
46+
`;
47+
48+
exports[`CLI --no-hot webpack 4 1`] = `
49+
"<i> [webpack-dev-server] Project is running at http://localhost:8080/
50+
<i> [webpack-dev-middleware] Hash: X
51+
<i> Version: webpack x.x.x Time: Xms
52+
<i> Built at: Thu Jan 01 1970 <CLR=BOLD>00:00:00</CLR> GMT
53+
<i> Asset Size Chunks Chunk Names
54+
<i> main.js X KiB main [emitted] main
55+
<i> Entrypoint main = main.js
56+
<i> [0] multi Xdir/client/default?http://localhost ./foo.js X bytes {main} [built]
57+
<i> [../../../client/clients/WebsocketClient.js] Xdir/client/clients/WebsocketClient.js X KiB {main} [built]
58+
<i> [../../../client/default/index.js?http://localhost] Xdir/client/default?http://localhost X KiB {main} [built]
59+
<i> [../../../client/default/overlay.js] Xdir/client/default/overlay.js X KiB {main} [built]
60+
<i> [../../../client/default/socket.js] Xdir/client/default/socket.js X KiB {main} [built]
61+
<i> [../../../client/default/utils/createSocketUrl.js] Xdir/client/default/utils/createSocketUrl.js X KiB {main} [built]
62+
<i> [../../../client/default/utils/getCurrentScriptSource.js] Xdir/client/default/utils/getCurrentScriptSource.js X bytes {main} [built]
63+
<i> [../../../client/default/utils/log.js] Xdir/client/default/utils/log.js X bytes {main} [built]
64+
<i> [../../../client/default/utils/reloadApp.js] Xdir/client/default/utils/reloadApp.js X KiB {main} [built]
65+
<i> [../../../client/default/utils/sendMessage.js] Xdir/client/default/utils/sendMessage.js X bytes {main} [built]
66+
<i> [../../../client/transpiled-modules/log.js] Xdir/client/transpiled-modules/log.js X KiB {main} [built]
67+
<i> [../../../client/transpiled-modules/strip-ansi.js] Xdir/client/transpiled-modules/strip-ansi.js X KiB {main} [built]
68+
<i> [../../../node_modules/ansi-html/index.js] Xdir/node_modules/ansi-html/index.js X KiB {main} [built]
69+
<i> [../../../node_modules/webpack/hot sync ^\\\\.\\\\/log$] (webpack)/hot sync nonrecursive ^\\\\.\\\\/log$ X bytes {main} [built]
70+
<i> [./foo.js] X bytes {main} [built]
71+
<i> + 16 hidden modules
72+
<i> [webpack-dev-middleware] Compiled successfully."
73+
`;
74+
75+
exports[`CLI --no-hot webpack 5 1`] = `
76+
"<i> [webpack-dev-server] Project is running at http://localhost:8080/
77+
<i> [webpack-dev-middleware] asset main.js X KiB [emitted] (name: main)
78+
<i> runtime modules X bytes 3 modules
79+
<i> cacheable modules X KiB
80+
<i> modules by path ../../../node_modules/ X KiB 14 modules
81+
<i> modules by path ../../../client/ X KiB
82+
<i> modules by path ../../../client/default/ X KiB 8 modules
83+
<i> modules by path ../../../client/transpiled-modules/*.js X KiB 2 modules
84+
<i> modules by path ../../../client/clients/*.js X KiB
85+
<i> ../../../client/clients/WebsocketClient.js X KiB [built] [code generated]
86+
<i> ../../../client/clients/BaseClient.js X KiB [built] [code generated]
87+
<i> ./foo.js X bytes [built] [code generated]
88+
<i> ../../../node_modules/webpack/hot/ sync nonrecursive ^\\\\.\\\\/log$ X bytes [built] [code generated]
89+
<i> webpack x.x.x compiled successfully in X ms
90+
<i> [webpack-dev-middleware] Compiled successfully."
91+
`;

test/cli/cli.test.js

+57-6
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,84 @@
11
'use strict';
22

3-
const { resolve } = require('path');
3+
const { join, resolve } = require('path');
44
const execa = require('execa');
55
const testBin = require('../helpers/test-bin');
6+
const isWebpack5 = require('../helpers/isWebpack5');
67

78
// skip if webpack-dev-server is not linked
89
let runCLITest = describe;
10+
let basePath;
911
try {
10-
require.resolve('webpack-dev-server');
12+
basePath = join(require.resolve('webpack-dev-server'), '..', '..');
1113
} catch {
1214
runCLITest = describe.skip;
1315
}
1416

1517
runCLITest('CLI', () => {
16-
it('--hot', (done) => {
18+
/* Based on webpack/test/StatsTestCases.test.js */
19+
/**
20+
* Escapes regular expression metacharacters
21+
* @param {string} str String to quote
22+
* @returns {string} Escaped string
23+
*/
24+
const quotemeta = (str) => {
25+
return str.replace(/[-[\]\\/{}()*+?.^$|]/g, '\\$&');
26+
};
27+
28+
const normalizeOutput = (output) =>
29+
output
30+
// eslint-disable-next-line no-control-regex
31+
.replace(/\u001b\[[0-9;]*m/g, '')
32+
.replace(/[.0-9]+(\s?)(ms|KiB|bytes)/g, 'X$1$2')
33+
.replace(
34+
/(Built at:) (.*)$/gm,
35+
'$1 Thu Jan 01 1970 <CLR=BOLD>00:00:00</CLR> GMT'
36+
)
37+
.replace(/webpack [^ )]+/g, 'webpack x.x.x')
38+
.replace(new RegExp(quotemeta(basePath), 'g'), 'Xdir')
39+
.replace(/(Hash:) [a-z0-9]+/g, '$1 X')
40+
.replace(/(\w)\\(\w)/g, '$1/$2')
41+
.replace(/ dependencies:Xms/g, '')
42+
.replace(/, additional resolving: X ms/g, '');
43+
44+
const webpack4Test = isWebpack5 ? it.skip : it;
45+
const webpack5Test = isWebpack5 ? it : it.skip;
46+
47+
webpack4Test('--hot webpack 4', (done) => {
1748
testBin('--hot')
1849
.then((output) => {
1950
expect(output.exitCode).toEqual(0);
20-
expect(output.stderr).toContain('/hot/dev-server');
51+
expect(normalizeOutput(output.stderr)).toMatchSnapshot();
2152
done();
2253
})
2354
.catch(done);
2455
});
2556

26-
it('--no-hot', (done) => {
57+
webpack4Test('--no-hot webpack 4', (done) => {
2758
testBin('--no-hot')
2859
.then((output) => {
2960
expect(output.exitCode).toEqual(0);
30-
expect(output.stderr).not.toContain('/hot/dev-server');
61+
expect(normalizeOutput(output.stderr)).toMatchSnapshot();
62+
done();
63+
})
64+
.catch(done);
65+
});
66+
67+
webpack5Test('--hot webpack 5', (done) => {
68+
testBin('--hot')
69+
.then((output) => {
70+
expect(output.exitCode).toEqual(0);
71+
expect(normalizeOutput(output.stderr)).toMatchSnapshot();
72+
done();
73+
})
74+
.catch(done);
75+
});
76+
77+
webpack5Test('--no-hot webpack 5', (done) => {
78+
testBin('--no-hot')
79+
.then((output) => {
80+
expect(output.exitCode).toEqual(0);
81+
expect(normalizeOutput(output.stderr)).toMatchSnapshot();
3182
done();
3283
})
3384
.catch(done);

test/fixtures/cli/webpack.config.js

-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ module.exports = {
44
mode: 'development',
55
context: __dirname,
66
entry: './foo.js',
7-
stats: 'verbose',
87
plugins: [
98
{
109
apply(compiler) {

0 commit comments

Comments
 (0)