From 2b4cb52d42a8b1ec4af56776983c731d85a468ae Mon Sep 17 00:00:00 2001 From: Yuta Hiroto Date: Mon, 10 Jun 2019 16:22:42 +0200 Subject: [PATCH] fix(open): set `wait: false` to run server.close successfully (#2001) fixes: https://github.com/webpack/webpack-dev-server/issues/1990 --- lib/utils/runOpen.js | 5 +- test/server/open-option.test.js | 15 ++++- test/server/utils/runOpen.test.js | 96 ++++++++++++++++++++++--------- 3 files changed, 83 insertions(+), 33 deletions(-) diff --git a/lib/utils/runOpen.js b/lib/utils/runOpen.js index b499888356..cf4de34279 100644 --- a/lib/utils/runOpen.js +++ b/lib/utils/runOpen.js @@ -3,11 +3,12 @@ const open = require('opn'); function runOpen(uri, options, log) { - let openOptions = {}; + // https://github.com/webpack/webpack-dev-server/issues/1990 + let openOptions = { wait: false }; let openMessage = 'Unable to open browser'; if (typeof options.open === 'string') { - openOptions = { app: options.open }; + openOptions = Object.assign({}, openOptions, { app: options.open }); openMessage += `: ${options.open}`; } diff --git a/test/server/open-option.test.js b/test/server/open-option.test.js index c0f1768b99..109798e476 100644 --- a/test/server/open-option.test.js +++ b/test/server/open-option.test.js @@ -21,9 +21,18 @@ describe('open option', () => { }); compiler.hooks.done.tap('webpack-dev-server', () => { - expect(opn.mock.calls[0]).toEqual(['http://localhost:8080/', {}]); - expect(opn.mock.invocationCallOrder[0]).toEqual(1); - server.close(done); + server.close(() => { + expect(opn.mock.calls[0]).toMatchInlineSnapshot(` + Array [ + "http://localhost:8080/", + Object { + "wait": false, + }, + ] + `); + expect(opn.mock.invocationCallOrder[0]).toEqual(1); + done(); + }); }); compiler.run(() => {}); diff --git a/test/server/utils/runOpen.test.js b/test/server/utils/runOpen.test.js index 51fce41300..fcb4b42225 100644 --- a/test/server/utils/runOpen.test.js +++ b/test/server/utils/runOpen.test.js @@ -17,7 +17,14 @@ describe('runOpen util', () => { it('on specify URL', () => { return runOpen('https://example.com', {}, console).then(() => { - expect(opn.mock.calls[0]).toEqual(['https://example.com', {}]); + expect(opn.mock.calls[0]).toMatchInlineSnapshot(` + Array [ + "https://example.com", + Object { + "wait": false, + }, + ] + `); }); }); @@ -27,10 +34,14 @@ describe('runOpen util', () => { { openPage: '/index.html' }, console ).then(() => { - expect(opn.mock.calls[0]).toEqual([ - 'https://example.com/index.html', - {}, - ]); + expect(opn.mock.calls[0]).toMatchInlineSnapshot(` + Array [ + "https://example.com/index.html", + Object { + "wait": false, + }, + ] + `); }); }); @@ -40,10 +51,15 @@ describe('runOpen util', () => { { open: 'Google Chrome' }, console ).then(() => { - expect(opn.mock.calls[0]).toEqual([ - 'https://example.com', - { app: 'Google Chrome' }, - ]); + expect(opn.mock.calls[0]).toMatchInlineSnapshot(` + Array [ + "https://example.com", + Object { + "app": "Google Chrome", + "wait": false, + }, + ] + `); }); }); @@ -53,10 +69,15 @@ describe('runOpen util', () => { { open: 'Google Chrome', openPage: '/index.html' }, console ).then(() => { - expect(opn.mock.calls[0]).toEqual([ - 'https://example.com/index.html', - { app: 'Google Chrome' }, - ]); + expect(opn.mock.calls[0]).toMatchInlineSnapshot(` + Array [ + "https://example.com/index.html", + Object { + "app": "Google Chrome", + "wait": false, + }, + ] + `); }); }); }); @@ -77,7 +98,14 @@ describe('runOpen util', () => { expect(logMock.warn.mock.calls[0][0]).toMatchInlineSnapshot( `"Unable to open browser. If you are running in a headless environment, please do not use the --open flag"` ); - expect(opn.mock.calls[0]).toEqual(['https://example.com', {}]); + expect(opn.mock.calls[0]).toMatchInlineSnapshot(` + Array [ + "https://example.com", + Object { + "wait": false, + }, + ] + `); }); }); @@ -90,10 +118,14 @@ describe('runOpen util', () => { expect(logMock.warn.mock.calls[0][0]).toMatchInlineSnapshot( `"Unable to open browser. If you are running in a headless environment, please do not use the --open flag"` ); - expect(opn.mock.calls[0]).toEqual([ - 'https://example.com/index.html', - {}, - ]); + expect(opn.mock.calls[0]).toMatchInlineSnapshot(` + Array [ + "https://example.com/index.html", + Object { + "wait": false, + }, + ] + `); }); }); @@ -106,12 +138,15 @@ describe('runOpen util', () => { expect(logMock.warn.mock.calls[0][0]).toMatchInlineSnapshot( `"Unable to open browser: Google Chrome. If you are running in a headless environment, please do not use the --open flag"` ); - expect(opn.mock.calls[0]).toEqual([ - 'https://example.com', - { - app: 'Google Chrome', - }, - ]); + expect(opn.mock.calls[0]).toMatchInlineSnapshot(` + Array [ + "https://example.com", + Object { + "app": "Google Chrome", + "wait": false, + }, + ] + `); }); }); @@ -124,10 +159,15 @@ describe('runOpen util', () => { expect(logMock.warn.mock.calls[0][0]).toMatchInlineSnapshot( `"Unable to open browser: Google Chrome. If you are running in a headless environment, please do not use the --open flag"` ); - expect(opn.mock.calls[0]).toEqual([ - 'https://example.com/index.html', - { app: 'Google Chrome' }, - ]); + expect(opn.mock.calls[0]).toMatchInlineSnapshot(` + Array [ + "https://example.com/index.html", + Object { + "app": "Google Chrome", + "wait": false, + }, + ] + `); }); }); });