Skip to content

Commit 4d3637d

Browse files
committed
test(server): add exit signal tests
1 parent 9ba22d5 commit 4d3637d

File tree

2 files changed

+61
-1
lines changed

2 files changed

+61
-1
lines changed

bin/webpack-dev-server.js

+4-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,10 @@ let server;
2222
const serverData = {
2323
server: null,
2424
};
25-
25+
// we must pass an object that contains the server object as a property so that
26+
// we can update this server property later, and setupExitSignals will be able to
27+
// recognize that the server has been instantiated, because we will set
28+
// serverData.server to the new server object.
2629
setupExitSignals(serverData);
2730

2831
// Prefer the local installation of webpack-dev-server
+57
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
'use strict';
2+
3+
const setupExitSignals = require('../../../lib/utils/setupExitSignals');
4+
5+
describe('setupExitSignals', () => {
6+
let server;
7+
let exitSpy;
8+
const signals = ['SIGINT', 'SIGTERM'];
9+
10+
beforeAll(() => {
11+
exitSpy = jest.spyOn(process, 'exit').mockImplementation(() => { });
12+
server = {
13+
close: jest.fn((callback) => {
14+
callback();
15+
}),
16+
};
17+
});
18+
19+
afterEach(() => {
20+
exitSpy.mockReset();
21+
server.close.mockClear();
22+
signals.forEach((signal) => {
23+
process.removeAllListeners(signal);
24+
});
25+
});
26+
27+
signals.forEach((signal) => {
28+
it(`should exit process (${signal}, server never defined)`, (done) => {
29+
setupExitSignals({
30+
server: null,
31+
});
32+
process.emit(signal);
33+
setTimeout(() => {
34+
expect(exitSpy.mock.calls.length).toEqual(1);
35+
done();
36+
}, 1000);
37+
});
38+
39+
it(`should close server, then exit process (${signal}, server defined before signal)`, (done) => {
40+
const serverData = {
41+
server: null,
42+
};
43+
setupExitSignals(serverData);
44+
45+
setTimeout(() => {
46+
serverData.server = server;
47+
process.emit(signal);
48+
}, 500);
49+
50+
setTimeout(() => {
51+
expect(server.close.mock.calls.length).toEqual(1);
52+
expect(exitSpy.mock.calls.length).toEqual(1);
53+
done();
54+
}, 1500);
55+
});
56+
});
57+
});

0 commit comments

Comments
 (0)