From 974ce25669ef6a4f55e8a7576fc140bc7ccb55f1 Mon Sep 17 00:00:00 2001 From: Alexander Akait <4567934+alexander-akait@users.noreply.github.com> Date: Thu, 12 Aug 2021 17:46:20 +0300 Subject: [PATCH] feat: async API (#3608) --- lib/Server.js | 392 ++++---- migration-v4.md | 102 ++ test/client/bundle.test.js | 18 +- .../__snapshots__/api.test.js.snap.webpack4 | 34 + .../__snapshots__/api.test.js.snap.webpack5 | 34 + test/e2e/allowed-hosts.test.js | 264 +----- test/e2e/api.test.js | 128 +++ test/e2e/entry.test.js | 216 +---- test/e2e/host-and-port.test.js | 72 +- test/e2e/hot-and-live-reload.test.js | 18 +- test/e2e/ipc.test.js | 72 +- test/e2e/logging.test.js | 22 +- test/e2e/overlay.test.js | 324 +------ test/e2e/progress.test.js | 18 +- test/e2e/stats.test.js | 18 +- test/e2e/target.test.js | 24 +- test/e2e/web-socket-communication.test.js | 129 +-- .../web-socket-server-and-transport.test.js | 284 +----- test/e2e/web-socket-server-url.test.js | 792 ++-------------- test/helpers/test-server.js | 20 +- test/integration/ModuleFederation.test.js | 36 +- test/integration/MultiCompiler.test.js | 18 +- test/integration/UniversalCompiler.test.js | 18 +- test/ports-map.js | 1 + test/server/Server.test.js | 104 ++- .../Server.test.js.snap.webpack4 | 86 +- .../Server.test.js.snap.webpack5 | 86 +- test/server/allowedHosts-option.test.js | 6 +- test/server/bonjour-option.test.js | 16 +- test/server/built-in-routes.test.js | 36 +- test/server/client-option.test.js | 90 +- test/server/compress-option.test.js | 54 +- test/server/headers-option.test.js | 72 +- test/server/historyApiFallback-option.test.js | 144 +-- test/server/host-option.test.js | 128 +-- test/server/hot-option.test.js | 132 +-- test/server/http2-option.test.js | 54 +- test/server/https-option.test.js | 108 +-- test/server/mimeTypes-option.test.js | 36 +- .../onAfterSetupMiddleware-option.test.js | 18 +- .../onBeforeSetupMiddleware-option.test.js | 17 +- test/server/onListening-option.test.js | 18 +- test/server/open-option.test.js | 884 ++++++++---------- test/server/port-option.test.js | 112 +-- test/server/proxy-option.test.js | 206 +--- test/server/setupExitSignals-option.test.js | 19 +- test/server/static-directory-option.test.js | 174 +--- test/server/static-publicPath-option.test.js | 180 +--- test/server/watchFiles-option.test.js | 144 +-- 49 files changed, 1483 insertions(+), 4495 deletions(-) create mode 100644 test/e2e/__snapshots__/api.test.js.snap.webpack4 create mode 100644 test/e2e/__snapshots__/api.test.js.snap.webpack5 create mode 100644 test/e2e/api.test.js diff --git a/lib/Server.js b/lib/Server.js index 2e28a7e13d..2b05e02aec 100644 --- a/lib/Server.js +++ b/lib/Server.js @@ -19,15 +19,12 @@ if (!process.env.WEBPACK_SERVE) { class Server { constructor(options = {}, compiler) { // TODO: remove this after plugin support is published - if (options.hooks) { - const showDeprecationWarning = util.deprecate( + util.deprecate( () => {}, "Using 'compiler' as the first argument is deprecated. Please use 'options' as the first argument and 'compiler' as the second argument.", - "DEP_WEBPACK_DEV_SERVER_API" - ); - - showDeprecationWarning(); + "DEP_WEBPACK_DEV_SERVER_CONSTRUCTOR" + )(); [options, compiler] = [compiler, options]; } @@ -38,7 +35,6 @@ class Server { this.staticWatchers = []; // Keep track of websocket proxies for external websocket upgrade. this.webSocketProxies = []; - this.compiler = compiler; } @@ -53,46 +49,36 @@ class Server { }; } - static getHostname(hostname) { + static async getHostname(hostname) { if (hostname === "local-ip") { - return internalIp.v4.sync() || internalIp.v6.sync() || "0.0.0.0"; + return (await internalIp.v4()) || (await internalIp.v6()) || "0.0.0.0"; } else if (hostname === "local-ipv4") { - return internalIp.v4.sync() || "0.0.0.0"; + return (await internalIp.v4()) || "0.0.0.0"; } else if (hostname === "local-ipv6") { - return internalIp.v6.sync() || "::"; + return (await internalIp.v6()) || "::"; } return hostname; } - static getFreePort(port) { - const pRetry = require("p-retry"); - const portfinder = require("portfinder"); - + static async getFreePort(port) { if (port && port !== "auto") { - return Promise.resolve(port); + return port; } - function runPortFinder() { - return new Promise((resolve, reject) => { - // Default port - portfinder.basePort = process.env.WEBPACK_DEV_SERVER_BASE_PORT || 8080; - portfinder.getPort((error, foundPort) => { - if (error) { - return reject(error); - } + const pRetry = require("p-retry"); + const portfinder = require("portfinder"); - return resolve(foundPort); - }); - }); - } + portfinder.basePort = process.env.WEBPACK_DEV_SERVER_BASE_PORT || 8080; // Try to find unused port and listen on it for 3 times, // if port is not specified in options. const defaultPortRetry = parseInt(process.env.WEBPACK_DEV_SERVER_PORT_RETRY, 10) || 3; - return pRetry(runPortFinder, { retries: defaultPortRetry }); + return pRetry(() => portfinder.getPortPromise(), { + retries: defaultPortRetry, + }); } static findCacheDir() { @@ -137,7 +123,11 @@ class Server { } // eslint-disable-next-line class-methods-use-this - normalizeOptions(options) { + async normalizeOptions(options) { + if (!this.logger) { + this.logger = this.compiler.getInfrastructureLogger("webpack-dev-server"); + } + // TODO: improve this to not use .find for compiler watchOptions const configArray = this.getCompilerConfigArray(this.compiler); const watchOptionsConfig = configArray.find( @@ -161,6 +151,7 @@ class Server { // `options.host` or `webSocketURL.hostname` and `localhost` options.allowedHosts = "auto"; } + if ( typeof options.allowedHosts === "string" && options.allowedHosts !== "auto" && @@ -619,7 +610,7 @@ class Server { } } - initialize() { + async initialize() { this.applyDevServerPlugin(); if (this.options.client && this.options.client.progress) { @@ -643,7 +634,7 @@ class Server { signals.forEach((signal) => { process.on(signal, () => { - this.close(() => { + this.stopCallback(() => { // eslint-disable-next-line no-process-exit process.exit(); }); @@ -1418,154 +1409,6 @@ class Server { } } - listen(port, hostname, fn) { - this.logger = this.compiler.getInfrastructureLogger("webpack-dev-server"); - this.normalizeOptions(this.options); - - if (typeof port === "function") { - fn = port; - } - - if ( - typeof port !== "undefined" && - typeof this.options.port !== "undefined" && - port !== this.options.port - ) { - this.options.port = port; - - this.logger.warn( - 'The "port" specified in options is different from the port passed as an argument. Will be used from arguments.' - ); - } - - if (!this.options.port) { - this.options.port = port; - } - - if ( - typeof hostname !== "undefined" && - typeof this.options.host !== "undefined" && - hostname !== this.options.host - ) { - this.options.host = hostname; - - this.logger.warn( - 'The "host" specified in options is different from the host passed as an argument. Will be used from arguments.' - ); - } - - if (!this.options.host) { - this.options.host = hostname; - } - - this.options.host = Server.getHostname(this.options.host); - - const resolveFreePortOrIPC = () => { - if (this.options.ipc) { - return new Promise((resolve, reject) => { - const net = require("net"); - const socket = new net.Socket(); - - socket.on("error", (error) => { - if (error.code === "ECONNREFUSED") { - fs.unlinkSync(this.options.ipc); - - resolve(this.options.ipc); - - return; - } else if (error.code === "ENOENT") { - resolve(this.options.ipc); - - return; - } - - reject(error); - }); - - socket.connect({ path: this.options.ipc }, () => { - throw new Error(`IPC "${this.options.ipc}" is already used`); - }); - }); - } - - return Server.getFreePort(this.options.port).then((foundPort) => { - this.options.port = foundPort; - }); - }; - - return resolveFreePortOrIPC() - .then(() => { - this.initialize(); - - const listenOptions = this.options.ipc - ? { path: this.options.ipc } - : { - host: this.options.host, - port: this.options.port, - }; - - return this.server.listen(listenOptions, (error) => { - if (this.options.ipc) { - // chmod 666 (rw rw rw) - const READ_WRITE = 438; - - fs.chmodSync(this.options.ipc, READ_WRITE); - } - - if (this.options.webSocketServer) { - try { - this.createWebSocketServer(); - } catch (webSocketServerError) { - fn.call(this.server, webSocketServerError); - - return; - } - } - - if (this.options.bonjour) { - this.runBonjour(); - } - - this.logStatus(); - - if (fn) { - fn.call(this.server, error); - } - - if (typeof this.options.onListening === "function") { - this.options.onListening(this); - } - }); - }) - .catch((error) => { - if (fn) { - fn.call(this.server, error); - } - }); - } - - close(callback) { - if (this.webSocketServer) { - this.webSocketServer.implementation.close(); - } - - const prom = Promise.all( - this.staticWatchers.map((watcher) => watcher.close()) - ); - this.staticWatchers = []; - - if (this.server) { - this.server.kill(() => { - // watchers must be closed before closing middleware - prom.then(() => { - this.middleware.close(callback); - }); - }); - } else if (callback) { - callback(); - } - } - // eslint-disable-next-line class-methods-use-this getStatsOption(configArray) { const isEmptyObject = (val) => @@ -1815,6 +1658,195 @@ class Server { this.middleware.invalidate(callback); } } + + async start() { + await this.normalizeOptions(this.options); + + if (this.options.ipc) { + await new Promise((resolve, reject) => { + const net = require("net"); + const socket = new net.Socket(); + + socket.on("error", (error) => { + if (error.code === "ECONNREFUSED") { + // No other server listening on this socket so it can be safely removed + fs.unlinkSync(this.options.ipc); + + resolve(); + + return; + } else if (error.code === "ENOENT") { + resolve(); + + return; + } + + reject(error); + }); + + socket.connect({ path: this.options.ipc }, () => { + throw new Error(`IPC "${this.options.ipc}" is already used`); + }); + }); + } else { + this.options.host = await Server.getHostname(this.options.host); + this.options.port = await Server.getFreePort(this.options.port); + } + + await this.initialize(); + + const listenOptions = this.options.ipc + ? { path: this.options.ipc } + : { host: this.options.host, port: this.options.port }; + + await new Promise((resolve) => { + this.server.listen(listenOptions, () => { + resolve(); + }); + }); + + if (this.options.ipc) { + // chmod 666 (rw rw rw) + const READ_WRITE = 438; + + fs.chmodSync(this.options.ipc, READ_WRITE); + } + + if (this.options.webSocketServer) { + this.createWebSocketServer(); + } + + if (this.options.bonjour) { + this.runBonjour(); + } + + this.logStatus(); + + if (typeof this.options.onListening === "function") { + this.options.onListening(this); + } + } + + startCallback(callback) { + this.start().then(() => callback(null), callback); + } + + async stop() { + if (this.webSocketServer) { + process.nextTick(() => { + this.webSocketServer.implementation.close(); + }); + } + + await Promise.all(this.staticWatchers.map((watcher) => watcher.close())); + + this.staticWatchers = []; + + if (this.server) { + await new Promise((resolve) => { + this.server.kill(() => { + resolve(); + }); + }); + + await new Promise((resolve, reject) => { + this.middleware.close((error) => { + if (error) { + reject(error); + + return; + } + + resolve(); + }); + }); + } + } + + stopCallback(callback) { + this.stop().then(() => callback(null), callback); + } + + // TODO remove in the next major release + listen(port, hostname, fn) { + util.deprecate( + () => {}, + "'listen' is deprecated. Please use async 'start' or 'startCallback' methods.", + "DEP_WEBPACK_DEV_SERVER_LISTEN" + )(); + + this.logger = this.compiler.getInfrastructureLogger("webpack-dev-server"); + + if (typeof port === "function") { + fn = port; + } + + if ( + typeof port !== "undefined" && + typeof this.options.port !== "undefined" && + port !== this.options.port + ) { + this.options.port = port; + + this.logger.warn( + 'The "port" specified in options is different from the port passed as an argument. Will be used from arguments.' + ); + } + + if (!this.options.port) { + this.options.port = port; + } + + if ( + typeof hostname !== "undefined" && + typeof this.options.host !== "undefined" && + hostname !== this.options.host + ) { + this.options.host = hostname; + + this.logger.warn( + 'The "host" specified in options is different from the host passed as an argument. Will be used from arguments.' + ); + } + + if (!this.options.host) { + this.options.host = hostname; + } + + return this.start() + .then(() => { + if (fn) { + fn.call(this.server); + } + }) + .catch((error) => { + // Nothing + if (fn) { + fn.call(this.server, error); + } + }); + } + + // TODO remove in the next major release + close(callback) { + util.deprecate( + () => {}, + "'close' is deprecated. Please use async 'stop' or 'stopCallback' methods.", + "DEP_WEBPACK_DEV_SERVER_CLOSE" + )(); + + return this.stop() + .then(() => { + if (callback) { + callback(null); + } + }) + .catch((error) => { + if (callback) { + callback(error); + } + }); + } } const mergeExports = (obj, exports) => { diff --git a/migration-v4.md b/migration-v4.md index 501a000187..0f32358649 100644 --- a/migration-v4.md +++ b/migration-v4.md @@ -491,6 +491,106 @@ module.exports = { - The `sockWrite` public method was renamed to `sendMessage`. - The `profile` option was removed in favor [`ProfilingPlugin`](https://webpack.js.org/plugins/profiling-plugin/). +### Deprecations + +- `constructor` arguments were changed, the first argument is dev server options, the second is compiler + + v3: + + ```js + const devServerOptions = { host: "127.0.0.1", port: 8080 }; + const devServer = new Server(compiler, devServerOptions); + ``` + + v4: + + ```js + const devServerOptions = { host: "127.0.0.1", port: 8080 }; + const devServer = new Server(devServerOptions, compiler); + ``` + +- `listen` method is deprecated in favor async `start` or `startCallback` methods + + v3: + + ```js + const devServerOptions = { host: "127.0.0.1", port: 8080 }; + const devServer = new Server(compiler, devServerOptions); + + devServer.listen(devServerOptions.host, devServerOptions.port, () => { + console.log("Running"); + }); + ``` + + v4: + + ```js + const devServerOptions = { host: "127.0.0.1", port: 8080 }; + const devServer = new Server(compiler, devServerOptions); + + (async () => { + await devServer.start(); + + console.log("Running"); + })(); + ``` + + ```js + const devServerOptions = { host: "127.0.0.1", port: 8080 }; + const devServer = new Server(compiler, devServerOptions); + + devServer.startCallback(() => { + console.log("Running"); + }); + ``` + +- `close` method is deprecated in favor async `stop` or `stopCallback` methods + + v3: + + ```js + const devServerOptions = { host: "127.0.0.1", port: 8080 }; + const devServer = new Server(compiler, devServerOptions); + + devServer.listen(devServerOptions.host, devServerOptions.port, () => { + console.log("Running"); + + devServer.close(() => { + console.log("Closed"); + }); + }); + ``` + + v4: + + ```js + const devServerOptions = { host: "127.0.0.1", port: 8080 }; + const devServer = new Server(compiler, devServerOptions); + + (async () => { + await devServer.start(); + + console.log("Running"); + + await devServer.stop(); + + console.log("Closed"); + })(); + ``` + + ```js + const devServerOptions = { host: "127.0.0.1", port: 8080 }; + const devServer = new Server(compiler, devServerOptions); + + devServer.startCallback(() => { + console.log("Running"); + + devServer.stopCallback(() => { + console.log("Closed"); + }); + }); + ``` + ### Features - Added the `setupExitSignals` option, it takes a boolean and if `true` (default on CLI), the server will close and exit the process on `SIGINT` and `SIGTERM`. @@ -503,6 +603,8 @@ module.exports = { - Overlay can be closed in browser. - The `allowedHosts` option can be `auto` or custom string with your domain (i.e. default value). - The `static` option can be disabled using `static: false`. +- Added async `start` and `stop` methods to API +- Added `startCallback` and `stopCallback` methods to API ### Bug Fixes diff --git a/test/client/bundle.test.js b/test/client/bundle.test.js index 7db01f1a03..83554f087b 100644 --- a/test/client/bundle.test.js +++ b/test/client/bundle.test.js @@ -21,27 +21,13 @@ describe("bundle", () => { server = new Server({ port }, compiler); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(server.app); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("should get full user bundle and parse with ES5", async () => { diff --git a/test/e2e/__snapshots__/api.test.js.snap.webpack4 b/test/e2e/__snapshots__/api.test.js.snap.webpack4 new file mode 100644 index 0000000000..8c31dd9873 --- /dev/null +++ b/test/e2e/__snapshots__/api.test.js.snap.webpack4 @@ -0,0 +1,34 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`API should work with async API: console messages 1`] = ` +Array [ + "[HMR] Waiting for update signal from WDS...", + "Hey.", + "[webpack-dev-server] Hot Module Replacement enabled.", + "[webpack-dev-server] Live Reloading enabled.", +] +`; + +exports[`API should work with async API: page errors 1`] = `Array []`; + +exports[`API should work with callback API: console messages 1`] = ` +Array [ + "[HMR] Waiting for update signal from WDS...", + "Hey.", + "[webpack-dev-server] Hot Module Replacement enabled.", + "[webpack-dev-server] Live Reloading enabled.", +] +`; + +exports[`API should work with callback API: page errors 1`] = `Array []`; + +exports[`API should work with deprecated API: console messages 1`] = ` +Array [ + "[HMR] Waiting for update signal from WDS...", + "Hey.", + "[webpack-dev-server] Hot Module Replacement enabled.", + "[webpack-dev-server] Live Reloading enabled.", +] +`; + +exports[`API should work with deprecated API: page errors 1`] = `Array []`; diff --git a/test/e2e/__snapshots__/api.test.js.snap.webpack5 b/test/e2e/__snapshots__/api.test.js.snap.webpack5 new file mode 100644 index 0000000000..8c31dd9873 --- /dev/null +++ b/test/e2e/__snapshots__/api.test.js.snap.webpack5 @@ -0,0 +1,34 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`API should work with async API: console messages 1`] = ` +Array [ + "[HMR] Waiting for update signal from WDS...", + "Hey.", + "[webpack-dev-server] Hot Module Replacement enabled.", + "[webpack-dev-server] Live Reloading enabled.", +] +`; + +exports[`API should work with async API: page errors 1`] = `Array []`; + +exports[`API should work with callback API: console messages 1`] = ` +Array [ + "[HMR] Waiting for update signal from WDS...", + "Hey.", + "[webpack-dev-server] Hot Module Replacement enabled.", + "[webpack-dev-server] Live Reloading enabled.", +] +`; + +exports[`API should work with callback API: page errors 1`] = `Array []`; + +exports[`API should work with deprecated API: console messages 1`] = ` +Array [ + "[HMR] Waiting for update signal from WDS...", + "Hey.", + "[webpack-dev-server] Hot Module Replacement enabled.", + "[webpack-dev-server] Live Reloading enabled.", +] +`; + +exports[`API should work with deprecated API: page errors 1`] = `Array []`; diff --git a/test/e2e/allowed-hosts.test.js b/test/e2e/allowed-hosts.test.js index faec702e0e..6a6188e34a 100644 --- a/test/e2e/allowed-hosts.test.js +++ b/test/e2e/allowed-hosts.test.js @@ -32,17 +32,7 @@ describe("allowed hosts", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); function startProxy(callback) { const app = express(); @@ -95,17 +85,7 @@ describe("allowed hosts", () => { proxy.close(); await browser.close(); - await new Promise((resolve, reject) => { - server.close((error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.stop(); }); it(`should disconnect web socket client using custom hostname from web socket server with the "auto" value based on the "origin" header ("${webSocketServer}")`, async () => { @@ -128,17 +108,7 @@ describe("allowed hosts", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); function startProxy(callback) { const app = express(); @@ -191,17 +161,7 @@ describe("allowed hosts", () => { proxy.close(); await browser.close(); - await new Promise((resolve, reject) => { - server.close((error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.stop(); }); it(`should connect web socket client using localhost to web socket server with the "auto" value ("${webSocketServer}")`, async () => { @@ -224,17 +184,7 @@ describe("allowed hosts", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); function startProxy(callback) { const app = express(); @@ -283,17 +233,7 @@ describe("allowed hosts", () => { proxy.close(); await browser.close(); - await new Promise((resolve, reject) => { - server.close((error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.stop(); }); it(`should connect web socket client using "127.0.0.1" host to web socket server with the "auto" value ("${webSocketServer}")`, async () => { @@ -316,17 +256,7 @@ describe("allowed hosts", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); function startProxy(callback) { const app = express(); @@ -375,17 +305,7 @@ describe("allowed hosts", () => { proxy.close(); await browser.close(); - await new Promise((resolve, reject) => { - server.close((error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.stop(); }); it(`should connect web socket client using "[::1] host to web socket server with the "auto" value ("${webSocketServer}")`, async () => { @@ -408,17 +328,7 @@ describe("allowed hosts", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); function startProxy(callback) { const app = express(); @@ -467,17 +377,7 @@ describe("allowed hosts", () => { proxy.close(); await browser.close(); - await new Promise((resolve, reject) => { - server.close((error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.stop(); }); it(`should connect web socket client using custom hostname to web socket server with the "all" value ("${webSocketServer}")`, async () => { @@ -500,17 +400,7 @@ describe("allowed hosts", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); function startProxy(callback) { const app = express(); @@ -563,17 +453,7 @@ describe("allowed hosts", () => { proxy.close(); await browser.close(); - await new Promise((resolve, reject) => { - server.close((error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.stop(); }); it(`should connect web socket client using custom hostname to web socket server with the custom hostname value ("${webSocketServer}")`, async () => { @@ -596,17 +476,7 @@ describe("allowed hosts", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); function startProxy(callback) { const app = express(); @@ -659,17 +529,7 @@ describe("allowed hosts", () => { proxy.close(); await browser.close(); - await new Promise((resolve, reject) => { - server.close((error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.stop(); }); it(`should connect web socket client using custom hostname to web socket server with the custom hostname value starting with dot ("${webSocketServer}")`, async () => { @@ -692,17 +552,7 @@ describe("allowed hosts", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); function startProxy(callback) { const app = express(); @@ -755,17 +605,7 @@ describe("allowed hosts", () => { proxy.close(); await browser.close(); - await new Promise((resolve, reject) => { - server.close((error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.stop(); }); it(`should connect web socket client using custom sub hostname to web socket server with the custom hostname value ("${webSocketServer}")`, async () => { @@ -788,17 +628,7 @@ describe("allowed hosts", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); function startProxy(callback) { const app = express(); @@ -854,17 +684,7 @@ describe("allowed hosts", () => { proxy.close(); await browser.close(); - await new Promise((resolve, reject) => { - server.close((error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.stop(); }); it(`should connect web socket client using custom hostname to web socket server with the multiple custom hostname values ("${webSocketServer}")`, async () => { @@ -887,17 +707,7 @@ describe("allowed hosts", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); function startProxy(callback) { const app = express(); @@ -950,17 +760,7 @@ describe("allowed hosts", () => { proxy.close(); await browser.close(); - await new Promise((resolve, reject) => { - server.close((error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.stop(); }); it(`should disconnect web client using localhost to web socket server with the "auto" value ("${webSocketServer}")`, async () => { @@ -983,17 +783,7 @@ describe("allowed hosts", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); function startProxy(callback) { const app = express(); @@ -1050,17 +840,7 @@ describe("allowed hosts", () => { proxy.close(); await browser.close(); - await new Promise((resolve, reject) => { - server.close((error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.stop(); }); } }); diff --git a/test/e2e/api.test.js b/test/e2e/api.test.js new file mode 100644 index 0000000000..14a6e61bee --- /dev/null +++ b/test/e2e/api.test.js @@ -0,0 +1,128 @@ +"use strict"; + +const webpack = require("webpack"); +const Server = require("../../lib/Server"); +const config = require("../fixtures/client-config/webpack.config"); +const runBrowser = require("../helpers/run-browser"); +const port = require("../ports-map").api; + +describe("API", () => { + it(`should work with async API`, async () => { + const compiler = webpack(config); + const server = new Server({ host: "127.0.0.1", port }, compiler); + + await server.start(); + + const { page, browser } = await runBrowser(); + + const pageErrors = []; + const consoleMessages = []; + + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + await page.goto(`http://127.0.0.1:${port}/main`, { + waitUntil: "networkidle0", + }); + + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages" + ); + expect(pageErrors).toMatchSnapshot("page errors"); + + await browser.close(); + await server.stop(); + }); + + it(`should work with callback API`, async () => { + const compiler = webpack(config); + const server = new Server({ host: "127.0.0.1", port }, compiler); + + await new Promise((resolve) => { + server.startCallback(() => { + resolve(); + }); + }); + + const { page, browser } = await runBrowser(); + + const pageErrors = []; + const consoleMessages = []; + + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + await page.goto(`http://127.0.0.1:${port}/main`, { + waitUntil: "networkidle0", + }); + + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages" + ); + expect(pageErrors).toMatchSnapshot("page errors"); + + await browser.close(); + await new Promise((resolve) => { + server.stopCallback(() => { + resolve(); + }); + }); + }); + + it(`should work with deprecated API`, async () => { + const compiler = webpack(config); + const devServerOptions = { host: "127.0.0.1", port }; + const server = new Server(devServerOptions, compiler); + + await new Promise((resolve, reject) => { + server.listen(devServerOptions.port, devServerOptions.host, (error) => { + if (error) { + reject(error); + + return; + } + + resolve(); + }); + }); + + const { page, browser } = await runBrowser(); + + const pageErrors = []; + const consoleMessages = []; + + page + .on("console", (message) => { + consoleMessages.push(message); + }) + .on("pageerror", (error) => { + pageErrors.push(error); + }); + + await page.goto(`http://127.0.0.1:${port}/main`, { + waitUntil: "networkidle0", + }); + + expect(consoleMessages.map((message) => message.text())).toMatchSnapshot( + "console messages" + ); + expect(pageErrors).toMatchSnapshot("page errors"); + + await browser.close(); + await new Promise((resolve) => { + server.close(() => { + resolve(); + }); + }); + }); +}); diff --git a/test/e2e/entry.test.js b/test/e2e/entry.test.js index bf925363de..90066ace6f 100644 --- a/test/e2e/entry.test.js +++ b/test/e2e/entry.test.js @@ -48,17 +48,7 @@ describe("entry", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -83,17 +73,7 @@ describe("entry", () => { expect(pageErrors).toMatchSnapshot("page errors"); await browser.close(); - await new Promise((resolve, reject) => { - server.close((error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.stop(); }); it("should work with single array entry", async () => { @@ -104,17 +84,7 @@ describe("entry", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -139,17 +109,7 @@ describe("entry", () => { expect(pageErrors).toMatchSnapshot("page errors"); await browser.close(); - await new Promise((resolve, reject) => { - server.close((error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.stop(); }); itOnlyWebpack5("should work with object entry", async () => { @@ -165,17 +125,7 @@ describe("entry", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -200,17 +150,7 @@ describe("entry", () => { expect(pageErrors).toMatchSnapshot("page errors"); await browser.close(); - await new Promise((resolve, reject) => { - server.close((error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.stop(); }); it("should work with dynamic entry", async () => { @@ -221,17 +161,7 @@ describe("entry", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -256,17 +186,7 @@ describe("entry", () => { expect(pageErrors).toMatchSnapshot("page errors"); await browser.close(); - await new Promise((resolve, reject) => { - server.close((error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.stop(); }); it("should work with dynamic async entry", async () => { @@ -280,17 +200,7 @@ describe("entry", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -315,17 +225,7 @@ describe("entry", () => { expect(pageErrors).toMatchSnapshot("page errors"); await browser.close(); - await new Promise((resolve, reject) => { - server.close((error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.stop(); }); it("should work with multiple entries", async () => { @@ -347,17 +247,7 @@ describe("entry", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -383,17 +273,7 @@ describe("entry", () => { expect(pageErrors).toMatchSnapshot("page errors"); await browser.close(); - await new Promise((resolve, reject) => { - server.close((error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.stop(); }); it("should work with multiple entries #2", async () => { @@ -415,17 +295,7 @@ describe("entry", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); const pageErrors = []; @@ -450,17 +320,7 @@ describe("entry", () => { expect(pageErrors).toMatchSnapshot("page errors"); await browser.close(); - await new Promise((resolve, reject) => { - server.close((error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.stop(); }); itOnlyWebpack5( @@ -482,17 +342,7 @@ describe("entry", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -518,17 +368,7 @@ describe("entry", () => { expect(pageErrors).toMatchSnapshot("page errors"); await browser.close(); - await new Promise((resolve, reject) => { - server.close((error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.stop(); } ); @@ -549,17 +389,7 @@ describe("entry", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -584,16 +414,6 @@ describe("entry", () => { expect(pageErrors).toMatchSnapshot("page errors"); await browser.close(); - await new Promise((resolve, reject) => { - server.close((error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.stop(); }); }); diff --git a/test/e2e/host-and-port.test.js b/test/e2e/host-and-port.test.js index 6855b90118..4b2c41854d 100644 --- a/test/e2e/host-and-port.test.js +++ b/test/e2e/host-and-port.test.js @@ -22,17 +22,7 @@ describe("host and port", () => { hostname = internalIp.v4.sync(); } - await new Promise((resolve, reject) => { - server.listen(port, host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -58,17 +48,7 @@ describe("host and port", () => { expect(pageErrors).toMatchSnapshot("page errors"); await browser.close(); - await new Promise((resolve, reject) => { - server.close((error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.stop(); }); it(`should work using "${host}" host and port as string`, async () => { @@ -81,17 +61,7 @@ describe("host and port", () => { hostname = internalIp.v4.sync(); } - await new Promise((resolve, reject) => { - server.listen(port, host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -117,17 +87,7 @@ describe("host and port", () => { expect(pageErrors).toMatchSnapshot("page errors"); await browser.close(); - await new Promise((resolve, reject) => { - server.close((error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.stop(); }); it(`should work using "${host}" host and "auto" port`, async () => { @@ -143,17 +103,7 @@ describe("host and port", () => { hostname = internalIp.v4.sync(); } - await new Promise((resolve, reject) => { - server.listen("auto", host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const address = server.server.address(); const { page, browser } = await runBrowser(); @@ -182,17 +132,7 @@ describe("host and port", () => { delete process.env.WEBPACK_DEV_SERVER_BASE_PORT; await browser.close(); - await new Promise((resolve, reject) => { - server.close((error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.stop(); }); } }); diff --git a/test/e2e/hot-and-live-reload.test.js b/test/e2e/hot-and-live-reload.test.js index 255b7b63bd..b8f786d35a 100644 --- a/test/e2e/hot-and-live-reload.test.js +++ b/test/e2e/hot-and-live-reload.test.js @@ -292,17 +292,7 @@ describe("hot and live reload", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); await new Promise((resolve, reject) => { request(`http://127.0.0.1:${devServerOptions.port}`) @@ -541,11 +531,7 @@ describe("hot and live reload", () => { fs.unlinkSync(cssFilePath); await browser.close(); - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); }); }); diff --git a/test/e2e/ipc.test.js b/test/e2e/ipc.test.js index 87c9a4a4aa..82c13cd720 100644 --- a/test/e2e/ipc.test.js +++ b/test/e2e/ipc.test.js @@ -30,17 +30,7 @@ describe("web socket server URL", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen((error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); function startProxy(callback) { const proxy = httpProxy.createProxyServer({ @@ -112,17 +102,7 @@ describe("web socket server URL", () => { proxy.close(); await browser.close(); - await new Promise((resolve, reject) => { - server.close((error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.stop(); }); it(`should work with the "ipc" option using "string" value ("${webSocketServer}")`, async () => { @@ -143,17 +123,7 @@ describe("web socket server URL", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen((error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); function startProxy(callback) { const proxy = httpProxy.createProxyServer({ @@ -225,17 +195,7 @@ describe("web socket server URL", () => { proxy.close(); await browser.close(); - await new Promise((resolve, reject) => { - server.close((error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.stop(); }); // TODO un skip after implement new API @@ -270,17 +230,7 @@ describe("web socket server URL", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen((error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); function startProxy(callback) { const proxy = httpProxy.createProxyServer({ @@ -365,17 +315,7 @@ describe("web socket server URL", () => { }); }); await browser.close(); - await new Promise((resolve, reject) => { - server.close((error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.stop(); }); } }); diff --git a/test/e2e/logging.test.js b/test/e2e/logging.test.js index 1bdeeb7c9e..3d3fdc27ce 100644 --- a/test/e2e/logging.test.js +++ b/test/e2e/logging.test.js @@ -196,21 +196,7 @@ describe("logging", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen( - devServerOptions.port, - devServerOptions.host, - (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - } - ); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -248,11 +234,7 @@ describe("logging", () => { ).toMatchSnapshot(); await browser.close(); - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); }); }); diff --git a/test/e2e/overlay.test.js b/test/e2e/overlay.test.js index 6cfdda9bf2..18e9e7fce5 100644 --- a/test/e2e/overlay.test.js +++ b/test/e2e/overlay.test.js @@ -54,17 +54,7 @@ describe("overlay", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -87,11 +77,7 @@ describe("overlay", () => { ); await browser.close(); - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("should show on an error for initial compilation", async () => { @@ -105,17 +91,7 @@ describe("overlay", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -138,11 +114,7 @@ describe("overlay", () => { ); await browser.close(); - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("should show on a warning and error for initial compilation", async () => { @@ -160,17 +132,7 @@ describe("overlay", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -193,11 +155,7 @@ describe("overlay", () => { ); await browser.close(); - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("should show on an ansi formatted error for initial compilation", async () => { @@ -213,17 +171,7 @@ describe("overlay", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -246,11 +194,7 @@ describe("overlay", () => { ); await browser.close(); - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("should show on a warning and error for initial compilation and protects against xss", async () => { @@ -265,17 +209,7 @@ describe("overlay", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -298,11 +232,7 @@ describe("overlay", () => { ); await browser.close(); - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("should not show initially, then show on an error, then hide on fix", async () => { @@ -313,17 +243,7 @@ describe("overlay", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -379,11 +299,7 @@ describe("overlay", () => { ); await browser.close(); - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("should not show initially, then show on an error, then show other error, then hide on fix", async () => { @@ -394,17 +310,7 @@ describe("overlay", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -480,11 +386,7 @@ describe("overlay", () => { ); await browser.close(); - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("should not show initially, then show on an error and allow to close", async () => { @@ -495,17 +397,7 @@ describe("overlay", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -569,11 +461,7 @@ describe("overlay", () => { fs.writeFileSync(pathToFile, originalCode); await browser.close(); - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it('should not show on a warning when "client.overlay" is "false"', async () => { @@ -590,17 +478,7 @@ describe("overlay", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -617,11 +495,7 @@ describe("overlay", () => { ); await browser.close(); - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it('should not show on a warning when "client.overlay.warnings" is "false"', async () => { @@ -640,17 +514,7 @@ describe("overlay", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -667,11 +531,7 @@ describe("overlay", () => { ); await browser.close(); - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it('should show on a warning when "client.overlay" is "true"', async () => { @@ -688,17 +548,7 @@ describe("overlay", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -721,11 +571,7 @@ describe("overlay", () => { ); await browser.close(); - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it('should show on a warning when "client.overlay.warnings" is "true"', async () => { @@ -744,17 +590,7 @@ describe("overlay", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -777,11 +613,7 @@ describe("overlay", () => { ); await browser.close(); - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it('should show on a warning when "client.overlay.errors" is "true"', async () => { @@ -800,17 +632,7 @@ describe("overlay", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -833,11 +655,7 @@ describe("overlay", () => { ); await browser.close(); - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it('should not show on an error when "client.overlay" is "false"', async () => { @@ -854,17 +672,7 @@ describe("overlay", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -881,11 +689,7 @@ describe("overlay", () => { ); await browser.close(); - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it('should not show on an error when "client.overlay.errors" is "false"', async () => { @@ -904,17 +708,7 @@ describe("overlay", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -931,11 +725,7 @@ describe("overlay", () => { ); await browser.close(); - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it('should show on an error when "client.overlay" is "true"', async () => { @@ -952,17 +742,7 @@ describe("overlay", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -985,11 +765,7 @@ describe("overlay", () => { ); await browser.close(); - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it('should show on an error when "client.overlay.errors" is "true"', async () => { @@ -1008,17 +784,7 @@ describe("overlay", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -1041,11 +807,7 @@ describe("overlay", () => { ); await browser.close(); - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it('should show on an error when "client.overlay.warnings" is "true"', async () => { @@ -1064,17 +826,7 @@ describe("overlay", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -1097,10 +849,6 @@ describe("overlay", () => { ); await browser.close(); - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); }); diff --git a/test/e2e/progress.test.js b/test/e2e/progress.test.js index a3608287c0..06e4fbfb3f 100644 --- a/test/e2e/progress.test.js +++ b/test/e2e/progress.test.js @@ -29,17 +29,7 @@ describe("progress", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -85,10 +75,6 @@ describe("progress", () => { fs.unlinkSync(cssFilePath); - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); }); diff --git a/test/e2e/stats.test.js b/test/e2e/stats.test.js index 2584e89c94..834b1936e8 100644 --- a/test/e2e/stats.test.js +++ b/test/e2e/stats.test.js @@ -114,17 +114,7 @@ describe("stats", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -143,11 +133,7 @@ describe("stats", () => { ).toMatchSnapshot(); await browser.close(); - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); }); }); diff --git a/test/e2e/target.test.js b/test/e2e/target.test.js index 256e0adc53..7eec0df0c4 100644 --- a/test/e2e/target.test.js +++ b/test/e2e/target.test.js @@ -52,17 +52,7 @@ describe("target", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -105,17 +95,7 @@ describe("target", () => { } await browser.close(); - await new Promise((resolve, reject) => { - server.close((error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.stop(); }); } }); diff --git a/test/e2e/web-socket-communication.test.js b/test/e2e/web-socket-communication.test.js index 00aa0a508d..15621bdc48 100644 --- a/test/e2e/web-socket-communication.test.js +++ b/test/e2e/web-socket-communication.test.js @@ -25,17 +25,7 @@ describe("web socket communication", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -53,19 +43,7 @@ describe("web socket communication", () => { await page.goto(`http://127.0.0.1:${port}/main`, { waitUntil: "networkidle0", }); - - await new Promise((resolve, reject) => { - server.close((error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); - + await server.stop(); await new Promise((resolve) => { const interval = setInterval(() => { if (server.webSocketServer.clients.size === 0) { @@ -81,17 +59,7 @@ describe("web socket communication", () => { expect(pageErrors).toMatchSnapshot("page errors"); await browser.close(); - await new Promise((resolve, reject) => { - server.close((error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.stop(); }); it(`should work and terminate client that is not alive ("${websocketServer}")`, async () => { @@ -105,17 +73,7 @@ describe("web socket communication", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -148,17 +106,7 @@ describe("web socket communication", () => { ); expect(pageErrors).toMatchSnapshot("page errors"); - await new Promise((resolve, reject) => { - server.close((error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.stop(); }); // TODO uncomment after fix regression in webpack @@ -173,17 +121,7 @@ describe("web socket communication", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -202,29 +140,8 @@ describe("web socket communication", () => { waitUntil: "networkidle0", }); - await new Promise((resolve, reject) => { - server.close((error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); - - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.stop(); + await server.start(); await page.waitForNavigation({ waitUntil: "networkidle0", @@ -236,17 +153,7 @@ describe("web socket communication", () => { expect(pageErrors).toMatchSnapshot("page errors"); await browser.close(); - await new Promise((resolve, reject) => { - server.close((error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.stop(); }); }); @@ -261,17 +168,7 @@ describe("web socket communication", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); server.webSocketServer.heartbeatInterval = 100; @@ -313,10 +210,6 @@ describe("web socket communication", () => { }); }); - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); }); diff --git a/test/e2e/web-socket-server-and-transport.test.js b/test/e2e/web-socket-server-and-transport.test.js index 30661b81b0..57875e8442 100644 --- a/test/e2e/web-socket-server-and-transport.test.js +++ b/test/e2e/web-socket-server-and-transport.test.js @@ -18,17 +18,7 @@ describe("web socket server and transport", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -50,12 +40,7 @@ describe("web socket server and transport", () => { expect(consoleMessages.map((message) => message.text())).toMatchSnapshot(); await browser.close(); - - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it('should use "ws" web socket server when specify "ws" value', async () => { @@ -66,17 +51,7 @@ describe("web socket server and transport", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -98,12 +73,7 @@ describe("web socket server and transport", () => { expect(consoleMessages.map((message) => message.text())).toMatchSnapshot(); await browser.close(); - - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it('should use "ws" web socket server when specify "ws" value using object', async () => { @@ -116,17 +86,7 @@ describe("web socket server and transport", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -148,12 +108,7 @@ describe("web socket server and transport", () => { expect(consoleMessages.map((message) => message.text())).toMatchSnapshot(); await browser.close(); - - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it('should use "sockjs" web socket server when specify "sockjs" value', async () => { @@ -164,17 +119,7 @@ describe("web socket server and transport", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -196,12 +141,7 @@ describe("web socket server and transport", () => { expect(consoleMessages.map((message) => message.text())).toMatchSnapshot(); await browser.close(); - - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it('should use "sockjs" web socket server when specify "sockjs" value using object', async () => { @@ -214,17 +154,7 @@ describe("web socket server and transport", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -246,12 +176,7 @@ describe("web socket server and transport", () => { expect(consoleMessages.map((message) => message.text())).toMatchSnapshot(); await browser.close(); - - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("should use custom web socket server when specify class", async () => { @@ -265,17 +190,7 @@ describe("web socket server and transport", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -297,12 +212,7 @@ describe("web socket server and transport", () => { expect(consoleMessages.map((message) => message.text())).toMatchSnapshot(); await browser.close(); - - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("should use custom web socket server when specify class using object", async () => { @@ -318,17 +228,7 @@ describe("web socket server and transport", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -350,12 +250,7 @@ describe("web socket server and transport", () => { expect(consoleMessages.map((message) => message.text())).toMatchSnapshot(); await browser.close(); - - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("should use custom web socket server when specify path to class", async () => { @@ -369,17 +264,7 @@ describe("web socket server and transport", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -401,12 +286,7 @@ describe("web socket server and transport", () => { expect(consoleMessages.map((message) => message.text())).toMatchSnapshot(); await browser.close(); - - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("should use custom web socket server when specify path to class using object", async () => { @@ -422,17 +302,7 @@ describe("web socket server and transport", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -454,12 +324,7 @@ describe("web socket server and transport", () => { expect(consoleMessages.map((message) => message.text())).toMatchSnapshot(); await browser.close(); - - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("should throw an error on wrong path", async () => { @@ -475,26 +340,12 @@ describe("web socket server and transport", () => { const server = new Server(devServerOptions, compiler); try { - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); } catch (error) { expect(error.message).toMatchSnapshot(); } - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it('should use "sockjs" transport, when web socket server is not specify', async () => { @@ -507,17 +358,7 @@ describe("web socket server and transport", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -539,12 +380,7 @@ describe("web socket server and transport", () => { expect(consoleMessages.map((message) => message.text())).toMatchSnapshot(); await browser.close(); - - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it('should use "ws" transport, when web socket server is not specify', async () => { @@ -557,17 +393,7 @@ describe("web socket server and transport", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -589,12 +415,7 @@ describe("web socket server and transport", () => { expect(consoleMessages.map((message) => message.text())).toMatchSnapshot(); await browser.close(); - - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it('should use "sockjs" transport and "sockjs" web socket server', async () => { @@ -608,17 +429,7 @@ describe("web socket server and transport", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -640,12 +451,7 @@ describe("web socket server and transport", () => { expect(consoleMessages.map((message) => message.text())).toMatchSnapshot(); await browser.close(); - - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it('should use "ws" transport and "ws" web socket server', async () => { @@ -659,17 +465,7 @@ describe("web socket server and transport", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -691,12 +487,7 @@ describe("web socket server and transport", () => { expect(consoleMessages.map((message) => message.text())).toMatchSnapshot(); await browser.close(); - - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it('should use custom transport and "sockjs" web socket server', async () => { @@ -712,17 +503,7 @@ describe("web socket server and transport", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -744,11 +525,6 @@ describe("web socket server and transport", () => { expect(consoleMessages.map((message) => message.text())).toMatchSnapshot(); await browser.close(); - - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); }); diff --git a/test/e2e/web-socket-server-url.test.js b/test/e2e/web-socket-server-url.test.js index 130b276116..794c9845e9 100644 --- a/test/e2e/web-socket-server-url.test.js +++ b/test/e2e/web-socket-server-url.test.js @@ -30,17 +30,7 @@ describe("web socket server URL", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); function startProxy(callback) { const app = express(); @@ -108,17 +98,7 @@ describe("web socket server URL", () => { proxy.close(); await browser.close(); - await new Promise((resolve, reject) => { - server.close((error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.stop(); }); it(`should work behind proxy, when hostnames are different and ports are same ("${webSocketServer}")`, async () => { @@ -136,17 +116,7 @@ describe("web socket server URL", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); function startProxy(callback) { const app = express(); @@ -214,17 +184,7 @@ describe("web socket server URL", () => { proxy.close(); await browser.close(); - await new Promise((resolve, reject) => { - server.close((error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.stop(); }); it(`should work behind proxy, when hostnames are different and ports are different ("${webSocketServer}")`, async () => { @@ -247,17 +207,7 @@ describe("web socket server URL", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); function startProxy(callback) { const app = express(); @@ -326,17 +276,7 @@ describe("web socket server URL", () => { proxy.close(); await browser.close(); - await new Promise((resolve, reject) => { - server.close((error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.stop(); }); it(`should work behind proxy, when the "host" option is "local-ip" and the "port" option is "auto" ("${webSocketServer}")`, async () => { @@ -354,17 +294,7 @@ describe("web socket server URL", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const resolvedHost = server.options.host; const resolvedPort = server.options.port; @@ -437,17 +367,7 @@ describe("web socket server URL", () => { proxy.close(); await browser.close(); - await new Promise((resolve, reject) => { - server.close((error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.stop(); delete process.env.WEBPACK_DEV_SERVER_BASE_PORT; }); @@ -467,17 +387,7 @@ describe("web socket server URL", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -523,17 +433,7 @@ describe("web socket server URL", () => { expect(pageErrors).toMatchSnapshot("page errors"); await browser.close(); - await new Promise((resolve, reject) => { - server.close((error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.stop(); }); it(`should work with the "client.webSocketURL.protocol" option using "auto:" value ("${webSocketServer}")`, async () => { @@ -551,17 +451,7 @@ describe("web socket server URL", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -607,17 +497,7 @@ describe("web socket server URL", () => { expect(pageErrors).toMatchSnapshot("page errors"); await browser.close(); - await new Promise((resolve, reject) => { - server.close((error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.stop(); }); it(`should work with the "client.webSocketURL.protocol" option using "http:" value and covert to "ws:" ("${webSocketServer}")`, async () => { @@ -635,17 +515,7 @@ describe("web socket server URL", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -691,17 +561,7 @@ describe("web socket server URL", () => { expect(pageErrors).toMatchSnapshot("page errors"); await browser.close(); - await new Promise((resolve, reject) => { - server.close((error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.stop(); }); it(`should work with the "client.webSocketURL.host" option ("${webSocketServer}")`, async () => { @@ -719,17 +579,7 @@ describe("web socket server URL", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -775,17 +625,7 @@ describe("web socket server URL", () => { expect(pageErrors).toMatchSnapshot("page errors"); await browser.close(); - await new Promise((resolve, reject) => { - server.close((error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.stop(); }); it(`should work with the "client.webSocketURL.host" option using "0.0.0.0" value ("${webSocketServer}")`, async () => { @@ -803,17 +643,7 @@ describe("web socket server URL", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -859,17 +689,7 @@ describe("web socket server URL", () => { expect(pageErrors).toMatchSnapshot("page errors"); await browser.close(); - await new Promise((resolve, reject) => { - server.close((error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.stop(); }); it(`should work with the "client.webSocketURL.port" option ("${webSocketServer}")`, async () => { @@ -887,17 +707,7 @@ describe("web socket server URL", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -943,17 +753,7 @@ describe("web socket server URL", () => { expect(pageErrors).toMatchSnapshot("page errors"); await browser.close(); - await new Promise((resolve, reject) => { - server.close((error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.stop(); }); it(`should work with the "client.webSocketURL.port" option as string ("${webSocketServer}")`, async () => { @@ -971,17 +771,7 @@ describe("web socket server URL", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -1027,17 +817,7 @@ describe("web socket server URL", () => { expect(pageErrors).toMatchSnapshot("page errors"); await browser.close(); - await new Promise((resolve, reject) => { - server.close((error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.stop(); }); it(`should work with "client.webSocketURL.port" and "webSocketServer.options.port" options as string ("${webSocketServer}")`, async () => { @@ -1062,17 +842,7 @@ describe("web socket server URL", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -1120,17 +890,7 @@ describe("web socket server URL", () => { expect(pageErrors).toMatchSnapshot("page errors"); await browser.close(); - await new Promise((resolve, reject) => { - server.close((error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.stop(); }); it(`should work with the "client.webSocketURL.port" option using "0" value ("${webSocketServer}")`, async () => { @@ -1148,17 +908,7 @@ describe("web socket server URL", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -1204,17 +954,7 @@ describe("web socket server URL", () => { expect(pageErrors).toMatchSnapshot("page errors"); await browser.close(); - await new Promise((resolve, reject) => { - server.close((error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.stop(); }); it(`should work with the "client.webSocketURL.pathname" option ("${webSocketServer}")`, async () => { @@ -1232,17 +972,7 @@ describe("web socket server URL", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -1288,17 +1018,7 @@ describe("web socket server URL", () => { expect(pageErrors).toMatchSnapshot("page errors"); await browser.close(); - await new Promise((resolve, reject) => { - server.close((error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.stop(); }); it(`should work with default "/ws" value of the "client.webSocketURL.pathname" option ("${webSocketServer}")`, async () => { @@ -1311,17 +1031,7 @@ describe("web socket server URL", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -1367,17 +1077,7 @@ describe("web socket server URL", () => { expect(pageErrors).toMatchSnapshot("page errors"); await browser.close(); - await new Promise((resolve, reject) => { - server.close((error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.stop(); }); it(`should work with the "client.webSocketURL.username" option ("${webSocketServer}")`, async () => { @@ -1395,17 +1095,7 @@ describe("web socket server URL", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -1451,17 +1141,7 @@ describe("web socket server URL", () => { expect(pageErrors).toMatchSnapshot("page errors"); await browser.close(); - await new Promise((resolve, reject) => { - server.close((error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.stop(); }); it(`should work with the "client.webSocketURL.password" option ("${webSocketServer}")`, async () => { @@ -1483,17 +1163,7 @@ describe("web socket server URL", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -1542,17 +1212,7 @@ describe("web socket server URL", () => { expect(pageErrors).toMatchSnapshot("page errors"); await browser.close(); - await new Promise((resolve, reject) => { - server.close((error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.stop(); }); it(`should work with the "client.webSocketURL.username" and "client.webSocketURL.password" option ("${webSocketServer}")`, async () => { @@ -1571,17 +1231,7 @@ describe("web socket server URL", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -1627,17 +1277,7 @@ describe("web socket server URL", () => { expect(pageErrors).toMatchSnapshot("page errors"); await browser.close(); - await new Promise((resolve, reject) => { - server.close((error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.stop(); }); it(`should work with the custom web socket server "path" ("${webSocketServer}")`, async () => { @@ -1655,17 +1295,7 @@ describe("web socket server URL", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -1711,17 +1341,7 @@ describe("web socket server URL", () => { expect(pageErrors).toMatchSnapshot("page errors"); await browser.close(); - await new Promise((resolve, reject) => { - server.close((error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.stop(); }); // Only works for "ws" server @@ -1740,17 +1360,7 @@ describe("web socket server URL", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -1798,17 +1408,7 @@ describe("web socket server URL", () => { expect(pageErrors).toMatchSnapshot("page errors"); await browser.close(); - await new Promise((resolve, reject) => { - server.close((error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.stop(); }); it(`should work with the "client.webSocketURL.pathname" option and the custom web socket server "path" ("${webSocketServer}")`, async () => { @@ -1831,17 +1431,7 @@ describe("web socket server URL", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -1887,17 +1477,7 @@ describe("web socket server URL", () => { expect(pageErrors).toMatchSnapshot("page errors"); await browser.close(); - await new Promise((resolve, reject) => { - server.close((error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.stop(); }); it(`should work with the "client.webSocketURL.pathname" option and the custom web socket server "path" ending without slash ("${webSocketServer}")`, async () => { @@ -1920,17 +1500,7 @@ describe("web socket server URL", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -1976,17 +1546,7 @@ describe("web socket server URL", () => { expect(pageErrors).toMatchSnapshot("page errors"); await browser.close(); - await new Promise((resolve, reject) => { - server.close((error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.stop(); }); // Only works for "ws" server, "sockjs" adds "/" be default, because need do requests like "/custom-ws/info?t=1624462615772" @@ -2010,17 +1570,7 @@ describe("web socket server URL", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -2066,17 +1616,7 @@ describe("web socket server URL", () => { expect(pageErrors).toMatchSnapshot("page errors"); await browser.close(); - await new Promise((resolve, reject) => { - server.close((error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.stop(); }); // Only works for "ws" server @@ -2100,17 +1640,7 @@ describe("web socket server URL", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -2158,17 +1688,7 @@ describe("web socket server URL", () => { expect(pageErrors).toMatchSnapshot("page errors"); await browser.close(); - await new Promise((resolve, reject) => { - server.close((error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.stop(); }); // Only works for "sockjs" server @@ -2193,17 +1713,7 @@ describe("web socket server URL", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -2249,17 +1759,7 @@ describe("web socket server URL", () => { expect(pageErrors).toMatchSnapshot("page errors"); await browser.close(); - await new Promise((resolve, reject) => { - server.close((error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.stop(); }); it(`should work when "host" option is IPv4 ("${webSocketServer}")`, async () => { @@ -2272,17 +1772,7 @@ describe("web socket server URL", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -2328,17 +1818,7 @@ describe("web socket server URL", () => { expect(pageErrors).toMatchSnapshot("page errors"); await browser.close(); - await new Promise((resolve, reject) => { - server.close((error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.stop(); }); it(`should work when "host" option is "local-ip" ("${webSocketServer}")`, async () => { @@ -2351,17 +1831,7 @@ describe("web socket server URL", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -2407,17 +1877,7 @@ describe("web socket server URL", () => { expect(pageErrors).toMatchSnapshot("page errors"); await browser.close(); - await new Promise((resolve, reject) => { - server.close((error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.stop(); }); it(`should work when "host" option is "local-ipv4" ("${webSocketServer}")`, async () => { @@ -2430,17 +1890,7 @@ describe("web socket server URL", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -2486,17 +1936,7 @@ describe("web socket server URL", () => { expect(pageErrors).toMatchSnapshot("page errors"); await browser.close(); - await new Promise((resolve, reject) => { - server.close((error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.stop(); }); it(`should work when "port" option is "auto" ("${webSocketServer}")`, async () => { @@ -2510,17 +1950,7 @@ describe("web socket server URL", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const resolvedFreePort = server.options.port; @@ -2568,17 +1998,7 @@ describe("web socket server URL", () => { expect(pageErrors).toMatchSnapshot("page errors"); await browser.close(); - await new Promise((resolve, reject) => { - server.close((error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.stop(); delete process.env.WEBPACK_DEV_SERVER_BASE_PORT; }); @@ -2601,17 +2021,7 @@ describe("web socket server URL", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -2657,17 +2067,7 @@ describe("web socket server URL", () => { expect(pageErrors).toMatchSnapshot("page errors"); await browser.close(); - await new Promise((resolve, reject) => { - server.close((error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.stop(); }); it(`should work with the "client.webSocketURL" option as "string" ("${webSocketServer}")`, async () => { @@ -2683,17 +2083,7 @@ describe("web socket server URL", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -2739,17 +2129,7 @@ describe("web socket server URL", () => { expect(pageErrors).toMatchSnapshot("page errors"); await browser.close(); - await new Promise((resolve, reject) => { - server.close((error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.stop(); }); it(`should work and throw an error on invalid web socket URL ("${webSocketServer}")`, async () => { @@ -2765,17 +2145,7 @@ describe("web socket server URL", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -2802,17 +2172,7 @@ describe("web socket server URL", () => { ).toMatchSnapshot("page errors"); await browser.close(); - await new Promise((resolve, reject) => { - server.close((error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.stop(); }); it(`should not work and output disconnect wrong web socket URL ("${webSocketServer}")`, async () => { @@ -2828,17 +2188,7 @@ describe("web socket server URL", () => { }; const server = new Server(devServerOptions, compiler); - await new Promise((resolve, reject) => { - server.listen(devServerOptions.port, devServerOptions.host, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const { page, browser } = await runBrowser(); @@ -2870,17 +2220,7 @@ describe("web socket server URL", () => { ).toMatchSnapshot("page errors"); await browser.close(); - await new Promise((resolve, reject) => { - server.close((error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.stop(); }); } }); diff --git a/test/helpers/test-server.js b/test/helpers/test-server.js index 48a9a24088..b8db552773 100644 --- a/test/helpers/test-server.js +++ b/test/helpers/test-server.js @@ -56,7 +56,13 @@ function startFullSetup(config, options, done) { function startAwaitingCompilationFullSetup(config, options, done) { let readyCount = 0; - const ready = () => { + const ready = (error) => { + if (error && done) { + done(error); + + return; + } + readyCount += 1; if (readyCount === 2) { @@ -68,7 +74,9 @@ function startAwaitingCompilationFullSetup(config, options, done) { // wait for compilation, since dev server can start before this // https://github.com/webpack/webpack-dev-server/issues/847 - fullSetup.compiler.hooks.done.tap("done", ready); + fullSetup.compiler.hooks.done.tap("done", () => { + ready(); + }); return fullSetup; } @@ -87,10 +95,6 @@ function start(config, options, done) { return startAwaitingCompilation(config, options, done); } -function startBeforeCompilation(config, options, done) { - return startFullSetup(config, options, done).server; -} - function close(done) { if (server) { server.close(() => { @@ -103,10 +107,6 @@ function close(done) { } module.exports = { - startFullSetup, - startAwaitingCompilation, - startAwaitingCompilationFullSetup, - startBeforeCompilation, start, close, }; diff --git a/test/integration/ModuleFederation.test.js b/test/integration/ModuleFederation.test.js index ae5f7498f7..1dc62b641f 100644 --- a/test/integration/ModuleFederation.test.js +++ b/test/integration/ModuleFederation.test.js @@ -30,27 +30,13 @@ describe("module federation", () => { server = new Server({ port }, compiler); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(server.app); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("should use the last entry export", async () => { @@ -94,27 +80,13 @@ describe("module federation", () => { server = new Server({ port }, compiler); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(server.app); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("should contain hot script", async () => { diff --git a/test/integration/MultiCompiler.test.js b/test/integration/MultiCompiler.test.js index 5babeba333..83039d0685 100644 --- a/test/integration/MultiCompiler.test.js +++ b/test/integration/MultiCompiler.test.js @@ -15,27 +15,13 @@ describe("multi compiler", () => { server = new Server({ port }, compiler); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(server.app); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("should handle GET request to bundle", async () => { diff --git a/test/integration/UniversalCompiler.test.js b/test/integration/UniversalCompiler.test.js index 61f0138a19..5db6e700ea 100644 --- a/test/integration/UniversalCompiler.test.js +++ b/test/integration/UniversalCompiler.test.js @@ -15,27 +15,13 @@ describe("universal compiler", () => { server = new Server({ port }, compiler); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(server.app); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("client bundle should have the inlined the client runtime", async () => { diff --git a/test/ports-map.js b/test/ports-map.js index 262c3b5f81..88d64ff4f7 100644 --- a/test/ports-map.js +++ b/test/ports-map.js @@ -68,6 +68,7 @@ const listOfTests = { entry: 1, "allowed-hosts": 2, "host-and-port": 1, + api: 1, }; let startPort = 8089; diff --git a/test/server/Server.test.js b/test/server/Server.test.js index 1839480394..8c1f19cd38 100644 --- a/test/server/Server.test.js +++ b/test/server/Server.test.js @@ -588,22 +588,12 @@ describe("Server", () => { } const compiler = webpack(webpackConfig); - const server = new Server(item.options, compiler); + const server = new Server({ ...item.options, port }, compiler); let errored; try { - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); } catch (error) { errored = error; } @@ -629,32 +619,32 @@ describe("Server", () => { expect(optionsForSnapshot).toMatchSnapshot(); } - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); }); }); describe("event emitter", () => { - it("test server error reporting", () => { + it("test server error reporting", async () => { const compiler = webpack(config); const server = new Server(baseDevConfig, compiler); + await server.start(); + const emitError = () => server.server.emit("error", new Error("Error !!!")); expect(emitError).toThrowError(); - server.close(); + await server.stop(); }); }); // issue: https://github.com/webpack/webpack-dev-server/issues/1724 describe("express.static.mime.types", () => { - it("should success even if mime.types doesn't exist", (done) => { + it("should success even if mime.types doesn't exist", async () => { + // expect.assertions(1); + jest.mock("express", () => { const data = jest.requireActual("express"); const { static: st } = data; @@ -670,14 +660,29 @@ describe("Server", () => { const compiler = webpack(config); const server = new Server(baseDevConfig, compiler); + let hasStats = false; + compiler.hooks.done.tap("webpack-dev-server", (s) => { const output = server.getStats(s); + expect(output.errors.length).toEqual(0); - server.close(done); + hasStats = true; + }); + + await server.start(); + + await new Promise((resolve) => { + const interval = setInterval(() => { + if (hasStats) { + resolve(); + + clearInterval(interval); + } + }, 100); }); - server.listen(port, "localhost"); + await server.stop(); }); }); @@ -823,10 +828,8 @@ describe("Server", () => { compiler = webpack(config); }); - afterEach((done) => { - server.close(() => { - done(); - }); + afterEach(async () => { + await server.stop(); }); it("should allow access for every requests using an IP", () => { @@ -874,45 +877,33 @@ describe("Server", () => { describe("Invalidate Callback", () => { describe("Testing callback functions on calling invalidate without callback", () => { - it("should use default `noop` callback", (done) => { + it("should use default `noop` callback", async () => { const compiler = webpack(config); const server = new Server(baseDevConfig, compiler); - compiler.hooks.done.tap("webpack-dev-server", () => { - server.close(done); - }); + await server.start(); - server.listen(port, "127.0.0.1", (error) => { - if (error) { - throw error; - } + server.invalidate(); - server.invalidate(); + expect(server.middleware.context.callbacks.length).toEqual(1); - expect(server.middleware.context.callbacks.length).toEqual(1); - }); + await server.stop(); }); }); describe("Testing callback functions on calling invalidate with callback", () => { - it("should use `callback` function", (done) => { + it("should use `callback` function", async () => { const compiler = webpack(config); const callback = jest.fn(); const server = new Server(baseDevConfig, compiler); - compiler.hooks.done.tap("webpack-dev-server", () => { - server.close(done); - }); + await server.start(); - server.listen(port, "127.0.0.1", (error) => { - if (error) { - throw error; - } + server.invalidate(callback); - server.invalidate(callback); + expect(server.middleware.context.callbacks[0]).toBe(callback); - expect(server.middleware.context.callbacks[0]).toBe(callback); - }); + await server.stop(); }); }); }); @@ -996,6 +987,7 @@ describe("Server", () => { process.env.WEBPACK_DEV_SERVER_PORT_RETRY = retryCount; const freePort = await Server.getFreePort(8082); + expect(freePort).toEqual(8082); }); @@ -1005,7 +997,9 @@ describe("Server", () => { process.env.WEBPACK_DEV_SERVER_PORT_RETRY = retryCount; await createDummyServers(retryCount); + const freePort = await Server.getFreePort(null); + expect(freePort).toEqual(60000 + retryCount); }); @@ -1015,8 +1009,10 @@ describe("Server", () => { process.env.WEBPACK_DEV_SERVER_PORT_RETRY = retryCount; await createDummyServers(retryCount); + // eslint-disable-next-line no-undefined const freePort = await Server.getFreePort(undefined); + expect(freePort).toEqual(60000 + retryCount); }); @@ -1026,7 +1022,9 @@ describe("Server", () => { process.env.WEBPACK_DEV_SERVER_PORT_RETRY = retryCount; await createDummyServers(retryCount); + const freePort = await Server.getFreePort(); + expect(freePort).toEqual(60000 + retryCount); }); @@ -1036,7 +1034,9 @@ describe("Server", () => { process.env.WEBPACK_DEV_SERVER_PORT_RETRY = retryCount; await createDummyServers(retryCount); + const freePort = await Server.getFreePort(); + expect(freePort).toEqual(60000 + retryCount); }); @@ -1046,7 +1046,9 @@ describe("Server", () => { process.env.WEBPACK_DEV_SERVER_PORT_RETRY = 1000; await createDummyServers(busyPorts); + const freePort = await Server.getFreePort(); + expect(freePort).toBeGreaterThan(60005); }); @@ -1055,7 +1057,7 @@ describe("Server", () => { jest.mock("portfinder", () => { return { - getPort: (callback) => callback(new Error("busy")), + getPortPromise: () => Promise.reject(new Error("busy")), }; }); @@ -1063,8 +1065,8 @@ describe("Server", () => { try { await Server.getFreePort(); - } catch (err) { - expect(err.message).toMatchSnapshot(); + } catch (error) { + expect(error.message).toMatchSnapshot(); } }); }); diff --git a/test/server/__snapshots__/Server.test.js.snap.webpack4 b/test/server/__snapshots__/Server.test.js.snap.webpack4 index 5a6534675f..eabda29f6f 100644 --- a/test/server/__snapshots__/Server.test.js.snap.webpack4 +++ b/test/server/__snapshots__/Server.test.js.snap.webpack4 @@ -69,7 +69,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -109,7 +109,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -150,7 +150,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -193,7 +193,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -236,7 +236,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -278,7 +278,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -320,7 +320,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -361,7 +361,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -402,7 +402,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -443,7 +443,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -487,7 +487,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -531,7 +531,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -573,7 +573,7 @@ Object { "serverSideRender": true, }, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -613,7 +613,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": false, "liveReload": true, "open": Array [], @@ -653,7 +653,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": "only", "liveReload": true, "open": Array [], @@ -693,7 +693,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -733,7 +733,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": false, "open": Array [], @@ -773,7 +773,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -813,7 +813,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -855,7 +855,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -895,7 +895,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -935,7 +935,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -977,7 +977,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -1019,7 +1019,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -1061,7 +1061,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -1101,7 +1101,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -1152,7 +1152,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -1203,7 +1203,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -1254,7 +1254,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -1294,7 +1294,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -1322,7 +1322,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -1362,7 +1362,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -1402,7 +1402,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -1442,7 +1442,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -1483,7 +1483,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -1523,7 +1523,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -1561,7 +1561,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -1601,7 +1601,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -1643,7 +1643,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -1683,7 +1683,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -1726,7 +1726,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -1766,7 +1766,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -1806,7 +1806,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], diff --git a/test/server/__snapshots__/Server.test.js.snap.webpack5 b/test/server/__snapshots__/Server.test.js.snap.webpack5 index 5a6534675f..eabda29f6f 100644 --- a/test/server/__snapshots__/Server.test.js.snap.webpack5 +++ b/test/server/__snapshots__/Server.test.js.snap.webpack5 @@ -69,7 +69,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -109,7 +109,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -150,7 +150,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -193,7 +193,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -236,7 +236,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -278,7 +278,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -320,7 +320,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -361,7 +361,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -402,7 +402,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -443,7 +443,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -487,7 +487,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -531,7 +531,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -573,7 +573,7 @@ Object { "serverSideRender": true, }, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -613,7 +613,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": false, "liveReload": true, "open": Array [], @@ -653,7 +653,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": "only", "liveReload": true, "open": Array [], @@ -693,7 +693,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -733,7 +733,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": false, "open": Array [], @@ -773,7 +773,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -813,7 +813,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -855,7 +855,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -895,7 +895,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -935,7 +935,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -977,7 +977,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -1019,7 +1019,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -1061,7 +1061,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -1101,7 +1101,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -1152,7 +1152,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -1203,7 +1203,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -1254,7 +1254,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -1294,7 +1294,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -1322,7 +1322,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -1362,7 +1362,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -1402,7 +1402,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -1442,7 +1442,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -1483,7 +1483,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -1523,7 +1523,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -1561,7 +1561,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -1601,7 +1601,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -1643,7 +1643,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -1683,7 +1683,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -1726,7 +1726,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -1766,7 +1766,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], @@ -1806,7 +1806,7 @@ Object { "compress": true, "devMiddleware": Object {}, "historyApiFallback": false, - "host": "127.0.0.1", + "host": undefined, "hot": true, "liveReload": true, "open": Array [], diff --git a/test/server/allowedHosts-option.test.js b/test/server/allowedHosts-option.test.js index ba125c9bf1..d9172e9c89 100644 --- a/test/server/allowedHosts-option.test.js +++ b/test/server/allowedHosts-option.test.js @@ -16,11 +16,7 @@ describe("allowedHosts", () => { }); afterEach(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("should always allow `localhost` if options.allowedHosts is auto", () => { diff --git a/test/server/bonjour-option.test.js b/test/server/bonjour-option.test.js index 04e54b71c5..b40d8f7ab9 100644 --- a/test/server/bonjour-option.test.js +++ b/test/server/bonjour-option.test.js @@ -36,8 +36,8 @@ describe("bonjour option", () => { ); }); - afterEach((done) => { - server.close(done); + afterEach(async () => { + await server.stop(); }); it("should call bonjour with correct params", () => { @@ -65,8 +65,8 @@ describe("bonjour option", () => { ); }); - afterEach((done) => { - server.close(done); + afterEach(async () => { + await server.stop(); }); it("bonjour should use https when passed in option", () => { @@ -96,8 +96,8 @@ describe("bonjour option", () => { ); }); - afterEach((done) => { - server.close(done); + afterEach(async () => { + await server.stop(); }); it("applies bonjour options", () => { @@ -129,8 +129,8 @@ describe("bonjour option", () => { ); }); - afterEach((done) => { - server.close(done); + afterEach(async () => { + await server.stop(); }); it("prefers bonjour options over devServer.https", () => { diff --git a/test/server/built-in-routes.test.js b/test/server/built-in-routes.test.js index 354fe7406f..c818e08840 100644 --- a/test/server/built-in-routes.test.js +++ b/test/server/built-in-routes.test.js @@ -22,27 +22,13 @@ describe("routes util", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(server.app); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("should handles GET request to sockjs bundle", async () => { @@ -139,27 +125,13 @@ describe("routes util", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(server.app); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("should handle GET request to directory index and list all middleware directories", async () => { diff --git a/test/server/client-option.test.js b/test/server/client-option.test.js index ce0ffa4e62..3a791b3ee0 100644 --- a/test/server/client-option.test.js +++ b/test/server/client-option.test.js @@ -25,27 +25,13 @@ describe("client option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(`http://localhost:${port}`); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("overlay true by default", () => { @@ -83,27 +69,13 @@ describe("client option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(`http://localhost:${port}`); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("responds with a 200 second", async () => { @@ -125,27 +97,13 @@ describe("client option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const res = await request(server.app).get("/main.js"); expect(res.text).not.toMatch(/client\/index\.js/); - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("disables hot entry", async () => { @@ -159,27 +117,13 @@ describe("client option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const res = await request(server.app).get("/main.js"); expect(res.text).not.toMatch(/webpack\/hot\/dev-server\.js/); - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); }); @@ -231,17 +175,7 @@ describe("client option", () => { let thrownError; try { - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); } catch (error) { thrownError = error; } @@ -252,11 +186,7 @@ describe("client option", () => { ); } - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); }); }); diff --git a/test/server/compress-option.test.js b/test/server/compress-option.test.js index eeec110c58..443eee67aa 100644 --- a/test/server/compress-option.test.js +++ b/test/server/compress-option.test.js @@ -16,27 +16,13 @@ describe("compress option", () => { server = new Server({ port }, compiler); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(server.app); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("request to bundle file", async () => { @@ -59,27 +45,13 @@ describe("compress option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(server.app); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("request to bundle file", async () => { @@ -102,27 +74,13 @@ describe("compress option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(server.app); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("request to bundle file", async () => { diff --git a/test/server/headers-option.test.js b/test/server/headers-option.test.js index 5bd1beaa89..28cb000f4d 100644 --- a/test/server/headers-option.test.js +++ b/test/server/headers-option.test.js @@ -22,27 +22,13 @@ describe("headers option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(server.app); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("GET request with headers", async () => { @@ -65,27 +51,13 @@ describe("headers option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(server.app); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("GET request with headers as an array", async () => { @@ -112,27 +84,13 @@ describe("headers option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(server.app); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("GET request with headers as a function", async () => { @@ -160,27 +118,13 @@ describe("headers option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(server.app); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("GET request with headers", async () => { diff --git a/test/server/historyApiFallback-option.test.js b/test/server/historyApiFallback-option.test.js index e3a059e407..7af881fe9a 100644 --- a/test/server/historyApiFallback-option.test.js +++ b/test/server/historyApiFallback-option.test.js @@ -25,27 +25,13 @@ describe("historyApiFallback option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(server.app); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("request to directory", async () => { @@ -73,27 +59,13 @@ describe("historyApiFallback option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(server.app); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("request to directory", async () => { @@ -122,27 +94,13 @@ describe("historyApiFallback option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(server.app); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("historyApiFallback should take preference above directory index", async () => { @@ -182,27 +140,13 @@ describe("historyApiFallback option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(server.app); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("historyApiFallback should work and ignore static content", async () => { @@ -240,27 +184,13 @@ describe("historyApiFallback option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(server.app); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("historyApiFallback respect rewrites for index", async () => { @@ -304,17 +234,7 @@ describe("historyApiFallback option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(server.app); }); @@ -322,11 +242,7 @@ describe("historyApiFallback option", () => { afterAll(async () => { consoleSpy.mockRestore(); - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("request to directory and log", async () => { @@ -363,17 +279,7 @@ describe("historyApiFallback option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(server.app); }); @@ -381,11 +287,7 @@ describe("historyApiFallback option", () => { afterAll(async () => { consoleSpy.mockRestore(); - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("request to directory and log", async () => { @@ -419,27 +321,13 @@ describe("historyApiFallback option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(server.app); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("should take precedence over static files", async () => { diff --git a/test/server/host-option.test.js b/test/server/host-option.test.js index 42cbe1861f..fe93b55e0a 100644 --- a/test/server/host-option.test.js +++ b/test/server/host-option.test.js @@ -33,33 +33,19 @@ describe("host option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(server.app); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("server address", () => { const address = server.server.address(); - expect(address.address).toBe("127.0.0.1"); + expect(address.address).toBe("::"); expect(address.port).toBe(port); }); @@ -87,27 +73,13 @@ describe("host option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "::", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(server.app); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("server address", () => { @@ -140,27 +112,13 @@ describe("host option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(server.app); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("server address", () => { @@ -193,27 +151,13 @@ describe("host option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(server.app); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("server address", () => { @@ -246,27 +190,13 @@ describe("host option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "0.0.0.0", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(server.app); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("server address", () => { @@ -299,27 +229,13 @@ describe("host option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, internalIPv4, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(server.app); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("server address", () => { @@ -352,27 +268,13 @@ describe("host option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, internalIPv4, (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(server.app); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("server address", () => { diff --git a/test/server/hot-option.test.js b/test/server/hot-option.test.js index 9b0d48e9cb..c7131d8e5a 100644 --- a/test/server/hot-option.test.js +++ b/test/server/hot-option.test.js @@ -17,27 +17,13 @@ describe("hot option", () => { server = new Server({ port }, compiler); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(server.app); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("should include hot script in the bundle", async () => { @@ -60,27 +46,13 @@ describe("hot option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(server.app); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("should include hot-only script in the bundle", async () => { @@ -97,27 +69,13 @@ describe("hot option", () => { server = new Server({ port }, compiler); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(server.app); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("should include hot script in the bundle", async () => { @@ -134,27 +92,13 @@ describe("hot option", () => { server = new Server({ port, hot: false }, compiler); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(server.app); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("should NOT include hot script in the bundle", async () => { @@ -183,27 +127,13 @@ describe("hot option", () => { }, }); - const serverInTest = new Server({ port }, compiler); - - await new Promise((resolve, reject) => { - serverInTest.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } + server = new Server({ port }, compiler); - resolve(); - }); - }); + await server.start(); expect(pluginFound).toBe(true); - await new Promise((resolve) => { - serverInTest.close(() => { - resolve(); - }); - }); + await server.stop(); }); }); @@ -222,27 +152,13 @@ describe("hot option", () => { }, }); - const serverInTest = new Server({ port }, compiler); - - await new Promise((resolve, reject) => { - serverInTest.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } + server = new Server({ port }, compiler); - resolve(); - }); - }); + await server.start(); expect(pluginFound).toBe(true); - await new Promise((resolve) => { - serverInTest.close(() => { - resolve(); - }); - }); + await server.stop(); }); }); @@ -261,27 +177,13 @@ describe("hot option", () => { }, }); - const serverInTest = new Server({ port, hot: false }, compiler); - - await new Promise((resolve, reject) => { - serverInTest.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } + server = new Server({ port, hot: false }, compiler); - resolve(); - }); - }); + await server.start(); expect(pluginFound).toBe(false); - await new Promise((resolve) => { - serverInTest.close(() => { - resolve(); - }); - }); + await server.stop(); }); }); }); diff --git a/test/server/http2-option.test.js b/test/server/http2-option.test.js index 413b2293b4..90f994bede 100644 --- a/test/server/http2-option.test.js +++ b/test/server/http2-option.test.js @@ -31,27 +31,13 @@ describe('"http2" option', () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(server.app); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("confirm http2 client can connect", (done) => { @@ -95,27 +81,13 @@ describe('"http2" option', () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(server.app); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("Request to index", async () => { @@ -140,27 +112,13 @@ describe('"http2" option', () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(server.app); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("Request to index", async () => { diff --git a/test/server/https-option.test.js b/test/server/https-option.test.js index a18065bdcf..5fa721501a 100644 --- a/test/server/https-option.test.js +++ b/test/server/https-option.test.js @@ -38,27 +38,13 @@ describe("https option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "::", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(server.app); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("Request to index", async () => { @@ -99,27 +85,13 @@ describe("https option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "::", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(server.app); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("Request to index", async () => { @@ -149,27 +121,13 @@ describe("https option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "::", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(server.app); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("Request to index", async () => { @@ -206,27 +164,13 @@ describe("https option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "::", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(server.app); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("Request to index", async () => { @@ -268,27 +212,13 @@ describe("https option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "::", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(server.app); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("Request to index", async () => { @@ -330,27 +260,13 @@ describe("https option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "::", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(server.app); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("Request to index", async () => { diff --git a/test/server/mimeTypes-option.test.js b/test/server/mimeTypes-option.test.js index 6df1b1e744..58d11f8e19 100644 --- a/test/server/mimeTypes-option.test.js +++ b/test/server/mimeTypes-option.test.js @@ -26,27 +26,13 @@ describe('"mimeTypes" option', () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(server.app); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("requests file with different js mime type", async () => { @@ -78,27 +64,13 @@ describe('"mimeTypes" option', () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(server.app); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("requests file with custom mime type", async () => { diff --git a/test/server/onAfterSetupMiddleware-option.test.js b/test/server/onAfterSetupMiddleware-option.test.js index 74725d6969..efb8540902 100644 --- a/test/server/onAfterSetupMiddleware-option.test.js +++ b/test/server/onAfterSetupMiddleware-option.test.js @@ -37,27 +37,13 @@ describe("onAfterSetupMiddleware option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(server.app); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("should handle after route", async () => { diff --git a/test/server/onBeforeSetupMiddleware-option.test.js b/test/server/onBeforeSetupMiddleware-option.test.js index 50cf5c9f8d..3bf11b4c6c 100644 --- a/test/server/onBeforeSetupMiddleware-option.test.js +++ b/test/server/onBeforeSetupMiddleware-option.test.js @@ -33,26 +33,13 @@ describe("onBeforeSetupMiddleware option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); + await server.start(); - return; - } - - resolve(); - }); - }); req = request(server.app); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("should handle before route", async () => { diff --git a/test/server/onListening-option.test.js b/test/server/onListening-option.test.js index d7d165edaa..6388d5ec8e 100644 --- a/test/server/onListening-option.test.js +++ b/test/server/onListening-option.test.js @@ -26,25 +26,11 @@ describe("onListening option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("should runs onListening callback", () => { diff --git a/test/server/open-option.test.js b/test/server/open-option.test.js index 5c4e41d32f..0b3bac3656 100644 --- a/test/server/open-option.test.js +++ b/test/server/open-option.test.js @@ -20,7 +20,6 @@ const internalIPv4 = internalIp.v4.sync(); describe('"open" option', () => { let compiler; - let server; beforeEach(() => { compiler = webpack(config); @@ -28,16 +27,10 @@ describe('"open" option', () => { afterEach(async () => { open.mockClear(); - - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); }); - it("should work with unspecified host", (done) => { - server = new Server( + it("should work with unspecified host", async () => { + const server = new Server( { open: true, port, @@ -45,21 +38,16 @@ describe('"open" option', () => { compiler ); - compiler.hooks.done.tap("webpack-dev-server", () => { - server.close(() => { - expect(open).toHaveBeenCalledWith(`http://localhost:${port}/`, { - wait: false, - }); + await server.start(); + await server.stop(); - done(); - }); + expect(open).toHaveBeenCalledWith(`http://localhost:${port}/`, { + wait: false, }); - - server.listen(port); }); - it("should work with the 'https' option", (done) => { - server = new Server( + it("should work with the 'https' option", async () => { + const server = new Server( { open: true, port, @@ -68,22 +56,18 @@ describe('"open" option', () => { compiler ); - compiler.hooks.done.tap("webpack-dev-server", () => { - server.close(() => { - expect(open).toHaveBeenCalledWith(`https://localhost:${port}/`, { - wait: false, - }); + await server.start(); + await server.stop(); - done(); - }); + expect(open).toHaveBeenCalledWith(`https://localhost:${port}/`, { + wait: false, }); - - server.listen(port); }); - it("should work with '0.0.0.0' host", (done) => { + it("should work with '0.0.0.0' host", async () => { const host = "0.0.0.0"; - server = new Server( + + const server = new Server( { host, port, @@ -92,22 +76,18 @@ describe('"open" option', () => { compiler ); - compiler.hooks.done.tap("webpack-dev-server", () => { - server.close(() => { - expect(open).toHaveBeenCalledWith(`http://${host}:${port}/`, { - wait: false, - }); + await server.start(); + await server.stop(); - done(); - }); + expect(open).toHaveBeenCalledWith(`http://${host}:${port}/`, { + wait: false, }); - - server.listen(port, host); }); - it("should work with '::' host", (done) => { + it("should work with '::' host", async () => { const host = "::"; - server = new Server( + + const server = new Server( { host, port, @@ -116,22 +96,18 @@ describe('"open" option', () => { compiler ); - compiler.hooks.done.tap("webpack-dev-server", () => { - server.close(() => { - expect(open).toHaveBeenCalledWith(`http://[${host}]:${port}/`, { - wait: false, - }); + await server.start(); + await server.stop(); - done(); - }); + expect(open).toHaveBeenCalledWith(`http://[${host}]:${port}/`, { + wait: false, }); - - server.listen(port, host); }); - it("should work with 'localhost' host", (done) => { + it("should work with 'localhost' host", async () => { const host = "localhost"; - server = new Server( + + const server = new Server( { host, port, @@ -140,22 +116,18 @@ describe('"open" option', () => { compiler ); - compiler.hooks.done.tap("webpack-dev-server", () => { - server.close(() => { - expect(open).toHaveBeenCalledWith(`http://${host}:${port}/`, { - wait: false, - }); + await server.start(); + await server.stop(); - done(); - }); + expect(open).toHaveBeenCalledWith(`http://${host}:${port}/`, { + wait: false, }); - - server.listen(port, host); }); - it("should work with '127.0.0.1' host", (done) => { + it("should work with '127.0.0.1' host", async () => { const host = "127.0.0.1"; - server = new Server( + + const server = new Server( { host, port, @@ -164,22 +136,18 @@ describe('"open" option', () => { compiler ); - compiler.hooks.done.tap("webpack-dev-server", () => { - server.close(() => { - expect(open).toHaveBeenCalledWith(`http://${host}:${port}/`, { - wait: false, - }); + await server.start(); + await server.stop(); - done(); - }); + expect(open).toHaveBeenCalledWith(`http://${host}:${port}/`, { + wait: false, }); - - server.listen(port, host); }); - it("should work with '::1' host", (done) => { + it("should work with '::1' host", async () => { const host = "::1"; - server = new Server( + + const server = new Server( { host, port, @@ -188,20 +156,16 @@ describe('"open" option', () => { compiler ); - compiler.hooks.done.tap("webpack-dev-server", () => { - server.close(() => { - expect(open).toHaveBeenCalledWith(`http://[${host}]:${port}/`, { - wait: false, - }); + await server.start(); + await server.stop(); - done(); - }); + expect(open).toHaveBeenCalledWith(`http://[${host}]:${port}/`, { + wait: false, }); - server.listen(port, host); }); - it(`should work with '${internalIPv4}' host`, (done) => { - server = new Server( + it(`should work with '${internalIPv4}' host`, async () => { + const server = new Server( { host: internalIPv4, port, @@ -210,22 +174,18 @@ describe('"open" option', () => { compiler ); - compiler.hooks.done.tap("webpack-dev-server", () => { - server.close(() => { - expect(open).toHaveBeenCalledWith(`http://${internalIPv4}:${port}/`, { - wait: false, - }); + await server.start(); + await server.stop(); - done(); - }); + expect(open).toHaveBeenCalledWith(`http://${internalIPv4}:${port}/`, { + wait: false, }); - - server.listen(port, internalIPv4); }); - it("should work with boolean", (done) => { + it("should work with boolean", async () => { const host = "localhost"; - server = new Server( + + const server = new Server( { host, port, @@ -234,22 +194,18 @@ describe('"open" option', () => { compiler ); - compiler.hooks.done.tap("webpack-dev-server", () => { - server.close(() => { - expect(open).toHaveBeenCalledWith(`http://${host}:${port}/`, { - wait: false, - }); + await server.start(); + await server.stop(); - done(); - }); + expect(open).toHaveBeenCalledWith(`http://${host}:${port}/`, { + wait: false, }); - - server.listen(port, host); }); - it("should work with boolean but don't close with 'false' value", (done) => { + it("should work with boolean but don't close with 'false' value", async () => { const host = "localhost"; - server = new Server( + + const server = new Server( { host, port, @@ -258,20 +214,16 @@ describe('"open" option', () => { compiler ); - compiler.hooks.done.tap("webpack-dev-server", () => { - server.close(() => { - expect(open).not.toHaveBeenCalled(); + await server.start(); + await server.stop(); - done(); - }); - }); - - server.listen(port, host); + expect(open).not.toHaveBeenCalled(); }); - it("should work with relative string", (done) => { + it("should work with relative string", async () => { const host = "localhost"; - server = new Server( + + const server = new Server( { host, port, @@ -280,22 +232,18 @@ describe('"open" option', () => { compiler ); - compiler.hooks.done.tap("webpack-dev-server", () => { - server.close(() => { - expect(open).toHaveBeenCalledWith(`http://${host}:${port}/index.html`, { - wait: false, - }); + await server.start(); + await server.stop(); - done(); - }); + expect(open).toHaveBeenCalledWith(`http://${host}:${port}/index.html`, { + wait: false, }); - - server.listen(port, host); }); - it('should work with "" pattern', (done) => { + it('should work with "" pattern', async () => { const host = "localhost"; - server = new Server( + + const server = new Server( { host, port, @@ -304,22 +252,18 @@ describe('"open" option', () => { compiler ); - compiler.hooks.done.tap("webpack-dev-server", () => { - server.close(() => { - expect(open).toHaveBeenCalledWith(`http://${host}:${port}/`, { - wait: false, - }); + await server.start(); + await server.stop(); - done(); - }); + expect(open).toHaveBeenCalledWith(`http://${host}:${port}/`, { + wait: false, }); - - server.listen(port, host); }); - it('should work with relative string starting with "/"', (done) => { + it('should work with relative string starting with "/"', async () => { const host = "localhost"; - server = new Server( + + const server = new Server( { host, port, @@ -328,22 +272,18 @@ describe('"open" option', () => { compiler ); - compiler.hooks.done.tap("webpack-dev-server", () => { - server.close(() => { - expect(open).toHaveBeenCalledWith(`http://${host}:${port}/index.html`, { - wait: false, - }); + await server.start(); + await server.stop(); - done(); - }); + expect(open).toHaveBeenCalledWith(`http://${host}:${port}/index.html`, { + wait: false, }); - - server.listen(port, host); }); - it("should work with absolute string", (done) => { + it("should work with absolute string", async () => { const host = "localhost"; - server = new Server( + + const server = new Server( { open: `http://${host}:${port}/index.html`, port, @@ -352,22 +292,18 @@ describe('"open" option', () => { compiler ); - compiler.hooks.done.tap("webpack-dev-server", () => { - server.close(() => { - expect(open).toHaveBeenCalledWith(`http://${host}:${port}/index.html`, { - wait: false, - }); + await server.start(); + await server.stop(); - done(); - }); + expect(open).toHaveBeenCalledWith(`http://${host}:${port}/index.html`, { + wait: false, }); - - server.listen(port, host); }); - it("should work with multiple relative strings", (done) => { + it("should work with multiple relative strings", async () => { const host = "localhost"; - server = new Server( + + const server = new Server( { host: "localhost", port, @@ -376,33 +312,29 @@ describe('"open" option', () => { compiler ); - compiler.hooks.done.tap("webpack-dev-server", () => { - server.close(() => { - expect(open).toHaveBeenNthCalledWith( - 1, - `http://${host}:${port}/first.html`, - { - wait: false, - } - ); - expect(open).toHaveBeenNthCalledWith( - 2, - `http://${host}:${port}/second.html`, - { - wait: false, - } - ); + await server.start(); + await server.stop(); - done(); - }); - }); - - server.listen(port, host); + expect(open).toHaveBeenNthCalledWith( + 1, + `http://${host}:${port}/first.html`, + { + wait: false, + } + ); + expect(open).toHaveBeenNthCalledWith( + 2, + `http://${host}:${port}/second.html`, + { + wait: false, + } + ); }); - it("should work with multiple absolute strings", (done) => { + it("should work with multiple absolute strings", async () => { const host = "localhost"; - server = new Server( + + const server = new Server( { host: "localhost", port, @@ -414,33 +346,29 @@ describe('"open" option', () => { compiler ); - compiler.hooks.done.tap("webpack-dev-server", () => { - server.close(() => { - expect(open).toHaveBeenNthCalledWith( - 1, - `http://${host}:${port}/first.html`, - { - wait: false, - } - ); - expect(open).toHaveBeenNthCalledWith( - 2, - `http://${host}:${port}/second.html`, - { - wait: false, - } - ); - - done(); - }); - }); + await server.start(); + await server.stop(); - server.listen(port, host); + expect(open).toHaveBeenNthCalledWith( + 1, + `http://${host}:${port}/first.html`, + { + wait: false, + } + ); + expect(open).toHaveBeenNthCalledWith( + 2, + `http://${host}:${port}/second.html`, + { + wait: false, + } + ); }); - it('should work with "" pattern in multiple strings', (done) => { + it('should work with "" pattern in multiple strings', async () => { const host = "localhost"; - server = new Server( + + const server = new Server( { host: "localhost", port, @@ -449,29 +377,25 @@ describe('"open" option', () => { compiler ); - compiler.hooks.done.tap("webpack-dev-server", () => { - server.close(() => { - expect(open).toHaveBeenNthCalledWith(1, `http://${host}:${port}/`, { - wait: false, - }); - expect(open).toHaveBeenNthCalledWith( - 2, - `http://${host}:${port}/second.html`, - { - wait: false, - } - ); + await server.start(); + await server.stop(); - done(); - }); + expect(open).toHaveBeenNthCalledWith(1, `http://${host}:${port}/`, { + wait: false, }); - - server.listen(port, host); + expect(open).toHaveBeenNthCalledWith( + 2, + `http://${host}:${port}/second.html`, + { + wait: false, + } + ); }); - it("should work with empty object", (done) => { + it("should work with empty object", async () => { const host = "localhost"; - server = new Server( + + const server = new Server( { host, port, @@ -480,22 +404,18 @@ describe('"open" option', () => { compiler ); - compiler.hooks.done.tap("webpack-dev-server", () => { - server.close(() => { - expect(open).toHaveBeenCalledWith(`http://${host}:${port}/`, { - wait: false, - }); + await server.start(); + await server.stop(); - done(); - }); + expect(open).toHaveBeenCalledWith(`http://${host}:${port}/`, { + wait: false, }); - - server.listen(port, host); }); - it("should work with object and with the 'target' option", (done) => { + it("should work with object and with the 'target' option", async () => { const host = "localhost"; - server = new Server( + + const server = new Server( { host, port, @@ -506,22 +426,18 @@ describe('"open" option', () => { compiler ); - compiler.hooks.done.tap("webpack-dev-server", () => { - server.close(() => { - expect(open).toHaveBeenCalledWith(`http://${host}:${port}/index.html`, { - wait: false, - }); + await server.start(); + await server.stop(); - done(); - }); + expect(open).toHaveBeenCalledWith(`http://${host}:${port}/index.html`, { + wait: false, }); - - server.listen(port, host); }); - it("should work with object and with multiple values of the 'target' option", (done) => { + it("should work with object and with multiple values of the 'target' option", async () => { const host = "localhost"; - server = new Server( + + const server = new Server( { host, port, @@ -532,33 +448,29 @@ describe('"open" option', () => { compiler ); - compiler.hooks.done.tap("webpack-dev-server", () => { - server.close(() => { - expect(open).toHaveBeenNthCalledWith( - 1, - `http://${host}:${port}/first.html`, - { - wait: false, - } - ); - expect(open).toHaveBeenNthCalledWith( - 2, - `http://${host}:${port}/second.html`, - { - wait: false, - } - ); - - done(); - }); - }); + await server.start(); + await server.stop(); - server.listen(port, host); + expect(open).toHaveBeenNthCalledWith( + 1, + `http://${host}:${port}/first.html`, + { + wait: false, + } + ); + expect(open).toHaveBeenNthCalledWith( + 2, + `http://${host}:${port}/second.html`, + { + wait: false, + } + ); }); - it("should work with object and with the 'app' option", (done) => { + it("should work with object and with the 'app' option", async () => { const host = "localhost"; - server = new Server( + + const server = new Server( { host, port, @@ -569,23 +481,19 @@ describe('"open" option', () => { compiler ); - compiler.hooks.done.tap("webpack-dev-server", () => { - server.close(() => { - expect(open).toHaveBeenCalledWith(`http://${host}:${port}/`, { - app: { name: "google-chrome" }, - wait: false, - }); + await server.start(); + await server.stop(); - done(); - }); + expect(open).toHaveBeenCalledWith(`http://${host}:${port}/`, { + app: { name: "google-chrome" }, + wait: false, }); - - server.listen(port, host); }); - it("should work with object and with the 'app' and 'arguments' options", (done) => { + it("should work with object and with the 'app' and 'arguments' options", async () => { const host = "localhost"; - server = new Server( + + const server = new Server( { host, port, @@ -596,23 +504,19 @@ describe('"open" option', () => { compiler ); - compiler.hooks.done.tap("webpack-dev-server", () => { - server.close(() => { - expect(open).toHaveBeenCalledWith(`http://${host}:${port}/`, { - app: { name: "google-chrome", arguments: ["--incognito"] }, - wait: false, - }); + await server.start(); + await server.stop(); - done(); - }); + expect(open).toHaveBeenCalledWith(`http://${host}:${port}/`, { + app: { name: "google-chrome", arguments: ["--incognito"] }, + wait: false, }); - - server.listen(port, host); }); - it('should work with object with "target" and "app" options', (done) => { + it('should work with object with "target" and "app" options', async () => { const host = "localhost"; - server = new Server( + + const server = new Server( { host, port, @@ -624,23 +528,19 @@ describe('"open" option', () => { compiler ); - compiler.hooks.done.tap("webpack-dev-server", () => { - server.close(() => { - expect(open).toHaveBeenCalledWith(`http://${host}:${port}/index.html`, { - app: { name: "google-chrome" }, - wait: false, - }); + await server.start(); + await server.stop(); - done(); - }); + expect(open).toHaveBeenCalledWith(`http://${host}:${port}/index.html`, { + app: { name: "google-chrome" }, + wait: false, }); - - server.listen(port, host); }); - it('should work with pattern in "target" and "app" options', (done) => { + it('should work with pattern in "target" and "app" options', async () => { const host = "localhost"; - server = new Server( + + const server = new Server( { host, port, @@ -652,23 +552,19 @@ describe('"open" option', () => { compiler ); - compiler.hooks.done.tap("webpack-dev-server", () => { - server.close(() => { - expect(open).toHaveBeenCalledWith(`http://${host}:${port}/`, { - app: { name: "google-chrome" }, - wait: false, - }); + await server.start(); + await server.stop(); - done(); - }); + expect(open).toHaveBeenCalledWith(`http://${host}:${port}/`, { + app: { name: "google-chrome" }, + wait: false, }); - - server.listen(port, host); }); - it("should work with object, with multiple value of the 'target' option and with the 'app' and 'arguments' options", (done) => { + it("should work with object, with multiple value of the 'target' option and with the 'app' and 'arguments' options", async () => { const host = "localhost"; - server = new Server( + + const server = new Server( { host, port, @@ -680,35 +576,31 @@ describe('"open" option', () => { compiler ); - compiler.hooks.done.tap("webpack-dev-server", () => { - server.close(() => { - expect(open).toHaveBeenNthCalledWith( - 1, - `http://${host}:${port}/first.html`, - { - wait: false, - app: { name: "google-chrome", arguments: ["--incognito"] }, - } - ); - expect(open).toHaveBeenNthCalledWith( - 2, - `http://${host}:${port}/second.html`, - { - wait: false, - app: { name: "google-chrome", arguments: ["--incognito"] }, - } - ); - - done(); - }); - }); + await server.start(); + await server.stop(); - server.listen(port, host); + expect(open).toHaveBeenNthCalledWith( + 1, + `http://${host}:${port}/first.html`, + { + wait: false, + app: { name: "google-chrome", arguments: ["--incognito"] }, + } + ); + expect(open).toHaveBeenNthCalledWith( + 2, + `http://${host}:${port}/second.html`, + { + wait: false, + app: { name: "google-chrome", arguments: ["--incognito"] }, + } + ); }); - it("should work with object, with multiple value of the 'target' option (relative and absolute URLs) and with the 'app' option with arguments", (done) => { + it("should work with object, with multiple value of the 'target' option (relative and absolute URLs) and with the 'app' option with arguments", async () => { const host = "localhost"; - server = new Server( + + const server = new Server( { host, port, @@ -720,35 +612,31 @@ describe('"open" option', () => { compiler ); - compiler.hooks.done.tap("webpack-dev-server", () => { - server.close(() => { - expect(open).toHaveBeenNthCalledWith( - 1, - `http://${host}:${port}/first.html`, - { - wait: false, - app: { name: "google-chrome", arguments: ["--incognito"] }, - } - ); - expect(open).toHaveBeenNthCalledWith( - 2, - `http://${host}:${port}/second.html`, - { - wait: false, - app: { name: "google-chrome", arguments: ["--incognito"] }, - } - ); - - done(); - }); - }); + await server.start(); + await server.stop(); - server.listen(port, host); + expect(open).toHaveBeenNthCalledWith( + 1, + `http://${host}:${port}/first.html`, + { + wait: false, + app: { name: "google-chrome", arguments: ["--incognito"] }, + } + ); + expect(open).toHaveBeenNthCalledWith( + 2, + `http://${host}:${port}/second.html`, + { + wait: false, + app: { name: "google-chrome", arguments: ["--incognito"] }, + } + ); }); - it("should work with pattern in multiple open options", (done) => { + it("should work with pattern in multiple open options", async () => { const host = "localhost"; - server = new Server( + + const server = new Server( { host, port, @@ -766,28 +654,24 @@ describe('"open" option', () => { compiler ); - compiler.hooks.done.tap("webpack-dev-server", () => { - server.close(() => { - expect(open).toHaveBeenCalledWith(`http://${host}:${port}/`, { - app: { name: "google-chrome" }, - wait: false, - }); - - expect(open).toHaveBeenCalledWith(`http://${host}:${port}/`, { - app: { name: "firefox" }, - wait: false, - }); + await server.start(); + await server.stop(); - done(); - }); + expect(open).toHaveBeenCalledWith(`http://${host}:${port}/`, { + app: { name: "google-chrome" }, + wait: false, }); - server.listen(port, host); + expect(open).toHaveBeenCalledWith(`http://${host}:${port}/`, { + app: { name: "firefox" }, + wait: false, + }); }); - it("should work with multiple open options without target", (done) => { + it("should work with multiple open options without target", async () => { const host = "localhost"; - server = new Server( + + const server = new Server( { host, port, @@ -803,26 +687,21 @@ describe('"open" option', () => { compiler ); - compiler.hooks.done.tap("webpack-dev-server", () => { - server.close(() => { - expect(open).toHaveBeenCalledWith(`http://${host}:${port}/`, { - app: { name: "google-chrome" }, - wait: false, - }); + await server.start(); + await server.stop(); - expect(open).toHaveBeenCalledWith(`http://${host}:${port}/`, { - app: { name: "firefox" }, - wait: false, - }); - - done(); - }); + expect(open).toHaveBeenCalledWith(`http://${host}:${port}/`, { + app: { name: "google-chrome" }, + wait: false, }); - server.listen(port, host); + expect(open).toHaveBeenCalledWith(`http://${host}:${port}/`, { + app: { name: "firefox" }, + wait: false, + }); }); - it("should log warning when can't open", (done) => { + it("should log warning when can't open", async () => { open.mockImplementation(() => Promise.reject()); const loggerWarnSpy = jest.fn(); @@ -836,7 +715,7 @@ describe('"open" option', () => { }; }); - server = new Server( + const server = new Server( { port, open: true, @@ -844,25 +723,21 @@ describe('"open" option', () => { compiler ); - compiler.hooks.done.tap("webpack-dev-server", () => { - server.close(() => { - expect(open).toHaveBeenCalledWith(`http://localhost:${port}/`, { - wait: false, - }); - expect(loggerWarnSpy).toHaveBeenCalledWith( - `Unable to open "http://localhost:${port}/" page. If you are running in a headless environment, please do not use the "open" option or related flags like "--open", "--open-target", and "--open-app".` - ); - - getInfrastructureLoggerSpy.mockRestore(); - loggerWarnSpy.mockRestore(); - done(); - }); + await server.start(); + await server.stop(); + + expect(open).toHaveBeenCalledWith(`http://localhost:${port}/`, { + wait: false, }); + expect(loggerWarnSpy).toHaveBeenCalledWith( + `Unable to open "http://localhost:${port}/" page. If you are running in a headless environment, please do not use the "open" option or related flags like "--open", "--open-target", and "--open-app".` + ); - server.listen(port); + getInfrastructureLoggerSpy.mockRestore(); + loggerWarnSpy.mockRestore(); }); - it("should log warning when can't open with string", (done) => { + it("should log warning when can't open with string", async () => { open.mockImplementation(() => Promise.reject()); const loggerWarnSpy = jest.fn(); @@ -876,7 +751,7 @@ describe('"open" option', () => { }; }); - server = new Server( + const server = new Server( { open: "index.html", port, @@ -884,28 +759,21 @@ describe('"open" option', () => { compiler ); - compiler.hooks.done.tap("webpack-dev-server", () => { - server.close(() => { - expect(open).toHaveBeenCalledWith( - `http://localhost:${port}/index.html`, - { - wait: false, - } - ); - expect(loggerWarnSpy).toHaveBeenCalledWith( - `Unable to open "http://localhost:${port}/index.html" page. If you are running in a headless environment, please do not use the "open" option or related flags like "--open", "--open-target", and "--open-app".` - ); - - getInfrastructureLoggerSpy.mockRestore(); - loggerWarnSpy.mockRestore(); - done(); - }); + await server.start(); + await server.stop(); + + expect(open).toHaveBeenCalledWith(`http://localhost:${port}/index.html`, { + wait: false, }); + expect(loggerWarnSpy).toHaveBeenCalledWith( + `Unable to open "http://localhost:${port}/index.html" page. If you are running in a headless environment, please do not use the "open" option or related flags like "--open", "--open-target", and "--open-app".` + ); - server.listen(port); + getInfrastructureLoggerSpy.mockRestore(); + loggerWarnSpy.mockRestore(); }); - it("should log warning when can't open with object", (done) => { + it("should log warning when can't open with object", async () => { open.mockImplementation(() => Promise.reject()); const loggerWarnSpy = jest.fn(); @@ -919,7 +787,7 @@ describe('"open" option', () => { }; }); - server = new Server( + const server = new Server( { open: { target: "index.html", @@ -930,29 +798,22 @@ describe('"open" option', () => { compiler ); - compiler.hooks.done.tap("webpack-dev-server", () => { - server.close(() => { - expect(open).toHaveBeenCalledWith( - `http://localhost:${port}/index.html`, - { - app: { name: "google-chrome" }, - wait: false, - } - ); - expect(loggerWarnSpy).toHaveBeenCalledWith( - `Unable to open "http://localhost:${port}/index.html" page in "google-chrome" app. If you are running in a headless environment, please do not use the "open" option or related flags like "--open", "--open-target", and "--open-app".` - ); - - loggerWarnSpy.mockRestore(); - getInfrastructureLoggerSpy.mockRestore(); - done(); - }); + await server.start(); + await server.stop(); + + expect(open).toHaveBeenCalledWith(`http://localhost:${port}/index.html`, { + app: { name: "google-chrome" }, + wait: false, }); + expect(loggerWarnSpy).toHaveBeenCalledWith( + `Unable to open "http://localhost:${port}/index.html" page in "google-chrome" app. If you are running in a headless environment, please do not use the "open" option or related flags like "--open", "--open-target", and "--open-app".` + ); - server.listen(port); + loggerWarnSpy.mockRestore(); + getInfrastructureLoggerSpy.mockRestore(); }); - it("should log warning when can't open with object with the 'app' option with arguments", (done) => { + it("should log warning when can't open with object with the 'app' option with arguments", async () => { open.mockImplementation(() => Promise.reject()); const loggerWarnSpy = jest.fn(); @@ -966,7 +827,7 @@ describe('"open" option', () => { }; }); - server = new Server( + const server = new Server( { open: { target: "index.html", @@ -980,32 +841,25 @@ describe('"open" option', () => { compiler ); - compiler.hooks.done.tap("webpack-dev-server", () => { - server.close(() => { - expect(open).toHaveBeenCalledWith( - `http://localhost:${port}/index.html`, - { - app: { - name: "google-chrome", - arguments: ["--incognito", "--new-window"], - }, - wait: false, - } - ); - expect(loggerWarnSpy).toHaveBeenCalledWith( - `Unable to open "http://localhost:${port}/index.html" page in "google-chrome" app with "--incognito --new-window" arguments. If you are running in a headless environment, please do not use the "open" option or related flags like "--open", "--open-target", and "--open-app".` - ); - - getInfrastructureLoggerSpy.mockRestore(); - loggerWarnSpy.mockRestore(); - done(); - }); + await server.start(); + await server.stop(); + + expect(open).toHaveBeenCalledWith(`http://localhost:${port}/index.html`, { + app: { + name: "google-chrome", + arguments: ["--incognito", "--new-window"], + }, + wait: false, }); + expect(loggerWarnSpy).toHaveBeenCalledWith( + `Unable to open "http://localhost:${port}/index.html" page in "google-chrome" app with "--incognito --new-window" arguments. If you are running in a headless environment, please do not use the "open" option or related flags like "--open", "--open-target", and "--open-app".` + ); - server.listen(port); + getInfrastructureLoggerSpy.mockRestore(); + loggerWarnSpy.mockRestore(); }); - it("should log warning when can't open with object with the 'app' option with arguments", (done) => { + it("should log warning when can't open with object with the 'app' option with arguments", async () => { open.mockImplementation(() => Promise.reject()); const loggerWarnSpy = jest.fn(); @@ -1019,7 +873,7 @@ describe('"open" option', () => { }; }); - server = new Server( + const server = new Server( { open: { target: ["first.html", `http://localhost:${port}/second.html`], @@ -1033,45 +887,41 @@ describe('"open" option', () => { compiler ); - compiler.hooks.done.tap("webpack-dev-server", () => { - server.close(() => { - expect(open).toHaveBeenNthCalledWith( - 1, - `http://localhost:${port}/first.html`, - { - wait: false, - app: { - name: "google-chrome", - arguments: ["--incognito", "--new-window"], - }, - } - ); - expect(open).toHaveBeenNthCalledWith( - 2, - `http://localhost:${port}/second.html`, - { - wait: false, - app: { - name: "google-chrome", - arguments: ["--incognito", "--new-window"], - }, - } - ); - expect(loggerWarnSpy).toHaveBeenNthCalledWith( - 1, - `Unable to open "http://localhost:${port}/first.html" page in "google-chrome" app with "--incognito --new-window" arguments. If you are running in a headless environment, please do not use the "open" option or related flags like "--open", "--open-target", and "--open-app".` - ); - expect(loggerWarnSpy).toHaveBeenNthCalledWith( - 2, - `Unable to open "http://localhost:${port}/second.html" page in "google-chrome" app with "--incognito --new-window" arguments. If you are running in a headless environment, please do not use the "open" option or related flags like "--open", "--open-target", and "--open-app".` - ); - - getInfrastructureLoggerSpy.mockRestore(); - loggerWarnSpy.mockRestore(); - done(); - }); - }); + await server.start(); + await server.stop(); + + expect(open).toHaveBeenNthCalledWith( + 1, + `http://localhost:${port}/first.html`, + { + wait: false, + app: { + name: "google-chrome", + arguments: ["--incognito", "--new-window"], + }, + } + ); + expect(open).toHaveBeenNthCalledWith( + 2, + `http://localhost:${port}/second.html`, + { + wait: false, + app: { + name: "google-chrome", + arguments: ["--incognito", "--new-window"], + }, + } + ); + expect(loggerWarnSpy).toHaveBeenNthCalledWith( + 1, + `Unable to open "http://localhost:${port}/first.html" page in "google-chrome" app with "--incognito --new-window" arguments. If you are running in a headless environment, please do not use the "open" option or related flags like "--open", "--open-target", and "--open-app".` + ); + expect(loggerWarnSpy).toHaveBeenNthCalledWith( + 2, + `Unable to open "http://localhost:${port}/second.html" page in "google-chrome" app with "--incognito --new-window" arguments. If you are running in a headless environment, please do not use the "open" option or related flags like "--open", "--open-target", and "--open-app".` + ); - server.listen(port); + getInfrastructureLoggerSpy.mockRestore(); + loggerWarnSpy.mockRestore(); }); }); diff --git a/test/server/port-option.test.js b/test/server/port-option.test.js index 06bf4abfda..f9eddaf2b3 100644 --- a/test/server/port-option.test.js +++ b/test/server/port-option.test.js @@ -20,6 +20,8 @@ describe('"port" option', () => { beforeAll(async () => { const compiler = webpack(config); + process.env.WEBPACK_DEV_SERVER_BASE_PORT = 10020; + server = new Server( { port, @@ -31,33 +33,21 @@ describe('"port" option', () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(server.app); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + delete process.env.WEBPACK_DEV_SERVER_BASE_PORT; + + await server.stop(); }); it("server address", () => { const address = server.server.address(); - expect(address.address).toBe("127.0.0.1"); + expect(address.address).toBe("::"); // Random port expect(address.port).toBeDefined(); }); @@ -73,6 +63,8 @@ describe('"port" option', () => { beforeAll(async () => { const compiler = webpack(config); + process.env.WEBPACK_DEV_SERVER_BASE_PORT = 10030; + server = new Server( { // eslint-disable-next-line no-undefined @@ -85,33 +77,21 @@ describe('"port" option', () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(server.app); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + delete process.env.WEBPACK_DEV_SERVER_BASE_PORT; + + await server.stop(); }); it("server address", () => { const address = server.server.address(); - expect(address.address).toBe("127.0.0.1"); + expect(address.address).toBe("::"); // Random port expect(address.port).toBeDefined(); }); @@ -127,6 +107,8 @@ describe('"port" option', () => { beforeAll(async () => { const compiler = webpack(config); + process.env.WEBPACK_DEV_SERVER_BASE_PORT = 10040; + server = new Server( { port: "auto", @@ -138,33 +120,21 @@ describe('"port" option', () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(server.app); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + delete process.env.WEBPACK_DEV_SERVER_BASE_PORT; + + await server.stop(); }); it("server address", () => { const address = server.server.address(); - expect(address.address).toBe("127.0.0.1"); + expect(address.address).toBe("::"); // Random port expect(address.port).toBeDefined(); }); @@ -191,33 +161,19 @@ describe('"port" option', () => { compiler ); - await new Promise((resolve, reject) => { - server.listen("33333", "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(server.app); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("server address", () => { const address = server.server.address(); - expect(address.address).toBe("127.0.0.1"); + expect(address.address).toBe("::"); expect(address.port).toBe(33333); }); @@ -243,33 +199,19 @@ describe('"port" option', () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(33333, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(server.app); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("server address", () => { const address = server.server.address(); - expect(address.address).toBe("127.0.0.1"); + expect(address.address).toBe("::"); expect(address.port).toBe(33333); }); diff --git a/test/server/proxy-option.test.js b/test/server/proxy-option.test.js index 0ac1ce158e..8f23637bd4 100644 --- a/test/server/proxy-option.test.js +++ b/test/server/proxy-option.test.js @@ -137,17 +137,7 @@ describe("proxy option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port3, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); await listenProxyServers(); @@ -155,12 +145,7 @@ describe("proxy option", () => { }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); - + await server.stop(); await closeProxyServers(); }); @@ -238,17 +223,7 @@ describe("proxy option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port3, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); await listenProxyServers(); @@ -256,12 +231,7 @@ describe("proxy option", () => { }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); - + await server.stop(); await closeProxyServers(); }); @@ -292,17 +262,7 @@ describe("proxy option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port3, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); await listenProxyServers(); @@ -310,12 +270,7 @@ describe("proxy option", () => { }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); - + await server.stop(); await closeProxyServers(); }); @@ -368,17 +323,7 @@ describe("proxy option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port3, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const proxy = express(); @@ -392,12 +337,7 @@ describe("proxy option", () => { }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); - + await server.stop(); await new Promise((resolve) => { listener.close(() => { resolve(); @@ -452,17 +392,7 @@ describe("proxy option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port3, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); webSocketServer = new WebSocketServer({ port: port4 }); webSocketServer.on("connection", (connection) => { @@ -492,11 +422,7 @@ describe("proxy option", () => { afterAll(async () => { webSocketServer.close(); - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); }); }); @@ -527,17 +453,7 @@ describe("proxy option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port3, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); const proxy = express(); @@ -589,11 +505,7 @@ describe("proxy option", () => { }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); await new Promise((resolve) => { listener.close(() => { @@ -676,17 +588,7 @@ describe("proxy option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port3, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); await listenProxyServers(); @@ -694,12 +596,7 @@ describe("proxy option", () => { }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); - + await server.stop(); await closeProxyServers(); }); @@ -745,17 +642,7 @@ describe("proxy option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port3, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); await listenProxyServers(); @@ -763,12 +650,7 @@ describe("proxy option", () => { }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); - + await server.stop(); await closeProxyServers(); }); @@ -815,17 +697,7 @@ describe("proxy option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port3, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); await listenProxyServers(); @@ -833,12 +705,7 @@ describe("proxy option", () => { }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); - + await server.stop(); await closeProxyServers(); }); @@ -887,17 +754,7 @@ describe("proxy option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port3, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); await listenProxyServers(); @@ -905,12 +762,7 @@ describe("proxy option", () => { }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); - + await server.stop(); await closeProxyServers(); }); @@ -959,27 +811,13 @@ describe("proxy option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port3, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(server.app); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); describe("target", () => { diff --git a/test/server/setupExitSignals-option.test.js b/test/server/setupExitSignals-option.test.js index 6dbc3f72fe..6eee7bd1db 100644 --- a/test/server/setupExitSignals-option.test.js +++ b/test/server/setupExitSignals-option.test.js @@ -10,6 +10,7 @@ describe("setupExitSignals option", () => { let exitSpy; let killSpy; let stdinResumeSpy; + const signals = ["SIGINT", "SIGTERM"]; beforeEach(async () => { @@ -23,17 +24,7 @@ describe("setupExitSignals option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); exitSpy = jest.spyOn(process, "exit").mockImplementation(() => {}); stdinResumeSpy = jest @@ -50,11 +41,7 @@ describe("setupExitSignals option", () => { }); process.stdin.removeAllListeners("end"); - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it.each(signals)("should close and exit on %s", (signal, done) => { diff --git a/test/server/static-directory-option.test.js b/test/server/static-directory-option.test.js index 4cbd8a91ce..0b11736464 100644 --- a/test/server/static-directory-option.test.js +++ b/test/server/static-directory-option.test.js @@ -37,27 +37,13 @@ describe("static.directory option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(server.app); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); fs.truncateSync(nestedFile); }); @@ -125,27 +111,13 @@ describe("static.directory option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(server.app); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("shouldn't list the files inside the assets folder (404)", async () => { @@ -178,27 +150,13 @@ describe("static.directory option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(server.app); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("should list the files inside the assets folder (200)", async () => { @@ -230,27 +188,13 @@ describe("static.directory option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(server.app); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("should list the files inside the assets folder (200)", async () => { @@ -279,27 +223,13 @@ describe("static.directory option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(server.app); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("Request to first directory", async () => { @@ -325,19 +255,22 @@ describe("static.directory option", () => { }); it("Should throw exception (external url)", (done) => { - try { - // eslint-disable-next-line no-unused-vars - server = testServer.start(config, { + expect.assertions(1); + + // eslint-disable-next-line no-unused-vars + server = testServer.start( + config, + { static: "https://example.com/", - }); + }, + (error) => { + expect(error.message).toBe( + "Using a URL as static.directory is not supported" + ); - expect(true).toBe(false); - } catch (e) { - expect(e.message).toBe( - "Using a URL as static.directory is not supported" - ); - done(); - } + server.close(done); + } + ); }); it("Should not throw exception (local path with lower case first character)", (done) => { @@ -385,19 +318,20 @@ describe("static.directory option", () => { }); it("Should throw exception (array with absolute url)", (done) => { - try { - // eslint-disable-next-line no-unused-vars - server = testServer.start(config, { + // eslint-disable-next-line no-unused-vars + server = testServer.start( + config, + { static: [publicDirectory, "https://example.com/"], - }); + }, + (error) => { + expect(error.message).toBe( + "Using a URL as static.directory is not supported" + ); - expect(true).toBe(false); - } catch (e) { - expect(e.message).toBe( - "Using a URL as static.directory is not supported" - ); - done(); - } + server.close(done); + } + ); }); }); @@ -418,27 +352,13 @@ describe("static.directory option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(server.app); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("Request to page", async () => { @@ -464,27 +384,13 @@ describe("static.directory option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(server.app); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("Request to page", async () => { diff --git a/test/server/static-publicPath-option.test.js b/test/server/static-publicPath-option.test.js index bbf5a5bb79..5a5672f6a4 100644 --- a/test/server/static-publicPath-option.test.js +++ b/test/server/static-publicPath-option.test.js @@ -36,27 +36,13 @@ describe("static.publicPath option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(server.app); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("Request to index", async () => { @@ -91,27 +77,13 @@ describe("static.publicPath option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(server.app); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("shouldn't list the files inside the assets folder (404)", async () => { @@ -145,27 +117,13 @@ describe("static.publicPath option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(server.app); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("should list the files inside the assets folder (200)", async () => { @@ -198,27 +156,13 @@ describe("static.publicPath option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(server.app); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("should list the files inside the assets folder (200)", async () => { @@ -256,27 +200,13 @@ describe("static.publicPath option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(server.app); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("Request to first directory", async () => { @@ -310,27 +240,13 @@ describe("static.publicPath option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(server.app); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("Request to page", async () => { @@ -355,27 +271,13 @@ describe("static.publicPath option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(server.app); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("Request foo.wasm", async () => { @@ -401,27 +303,13 @@ describe("static.publicPath option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(server.app); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("GET request", async () => { @@ -484,27 +372,13 @@ describe("static.publicPath option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(server.app); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("Request the first path to index", async () => { @@ -552,27 +426,13 @@ describe("static.publicPath option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); req = request(server.app); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); }); it("Request the first path to index", async () => { diff --git a/test/server/watchFiles-option.test.js b/test/server/watchFiles-option.test.js index 2cdcb662ca..bb50c7cd2c 100644 --- a/test/server/watchFiles-option.test.js +++ b/test/server/watchFiles-option.test.js @@ -30,25 +30,11 @@ describe("'watchFiles' option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); fs.truncateSync(file); }); @@ -81,25 +67,11 @@ describe("'watchFiles' option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); fs.truncateSync(file); }); @@ -132,25 +104,11 @@ describe("'watchFiles' option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); fs.truncateSync(file); }); @@ -189,25 +147,11 @@ describe("'watchFiles' option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); fs.truncateSync(nonExistFile); }); @@ -245,25 +189,11 @@ describe("'watchFiles' option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); fs.truncateSync(file); }); @@ -297,25 +227,11 @@ describe("'watchFiles' option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); fs.truncateSync(file); }); @@ -358,25 +274,11 @@ describe("'watchFiles' option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); fs.truncateSync(file); fs.truncateSync(other); @@ -460,25 +362,11 @@ describe("'watchFiles' option", () => { compiler ); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", (error) => { - if (error) { - reject(error); - - return; - } - - resolve(); - }); - }); + await server.start(); }); afterAll(async () => { - await new Promise((resolve) => { - server.close(() => { - resolve(); - }); - }); + await server.stop(); fs.truncateSync(file); });