From 86871e101d4a7302c9c56814f7a3bb2f17a92b79 Mon Sep 17 00:00:00 2001 From: Eslam El-Hakmey Date: Fri, 17 May 2019 17:13:30 +0200 Subject: [PATCH] feat(server): add callback support for invalidate --- lib/Server.js | 4 ++-- test/Server.test.js | 46 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 2 deletions(-) diff --git a/lib/Server.js b/lib/Server.js index ca1a357a1e..1414343bee 100644 --- a/lib/Server.js +++ b/lib/Server.js @@ -1003,9 +1003,9 @@ class Server { this.contentBaseWatchers.push(watcher); } - invalidate() { + invalidate(callback) { if (this.middleware) { - this.middleware.invalidate(); + this.middleware.invalidate(callback); } } } diff --git a/test/Server.test.js b/test/Server.test.js index 7e05d0e968..f2c186a21e 100644 --- a/test/Server.test.js +++ b/test/Server.test.js @@ -2,6 +2,7 @@ const { relative, sep } = require('path'); const webpack = require('webpack'); +const { noop } = require('webpack-dev-middleware/lib/util'); const request = require('supertest'); // Mock opn before loading Server jest.mock('opn'); @@ -74,6 +75,51 @@ describe('Server', () => { }); }); + describe('Testing callback functions on calling invalidate without callback', () => { + it('should be `noop` (the default callback function)', () => { + return new Promise((res) => { + // eslint-disable-next-line + const Server = require('../lib/Server'); + const compiler = webpack(config); + const server = new Server(compiler); + + server.invalidate(); + expect(server.middleware.context.callbacks[0]).toBe(noop); + + compiler.hooks.done.tap('webpack-dev-server', () => { + server.close(() => { + res(); + }); + }); + + compiler.run(() => {}); + }); + }); + }); + + describe('Testing callback functions on calling invalidate with callback', () => { + it('should be `callback` function', () => { + return new Promise((res) => { + // eslint-disable-next-line + const Server = require('../lib/Server'); + const compiler = webpack(config); + const callback = jest.fn(); + const server = new Server(compiler); + server.invalidate(callback); + + expect(server.middleware.context.callbacks[0]).toBe(callback); + + compiler.hooks.done.tap('webpack-dev-server', () => { + server.close(() => { + res(); + }); + }); + + compiler.run(() => {}); + }); + }); + }); + // issue: https://github.com/webpack/webpack-dev-server/issues/1724 describe('express.static.mine.types', () => { beforeEach(() => {