From 2514932550fcd4ee08c82486b572167b6afe5670 Mon Sep 17 00:00:00 2001 From: Allan Oricil Date: Mon, 28 Oct 2024 10:36:32 -0300 Subject: [PATCH] feat: enable start/stop server in vitest Callback using "done" in vitest was deprecated. They recommend using async/await or add a arrow function that returns a promise. Since async/await is less verbose, making start/stop server async makes sense. --- index.js | 76 +++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 47 insertions(+), 29 deletions(-) diff --git a/index.js b/index.js index afd2180..80ae4a3 100644 --- a/index.js +++ b/index.js @@ -394,37 +394,55 @@ class NodeTestHelper extends EventEmitter { return request(this._httpAdmin); } - startServer(done) { - this._app = express(); - const server = stoppable(http.createServer((req, res) => { - this._app(req, res); - }), 0); - - this._RED.init(server,{ - logging:{console:{level:'off'}} - }); - server.listen(this._listenPort, this._address); - server.on('listening', () => { - this._port = server.address().port; - // internal API - this._comms.start(); - done(); - }); - this._server = server; + async startServer(done) { + try { + await new Promise((resolve, reject) => { + this._app = express(); + const server = stoppable( + http.createServer((req, res) => this._app(req, res)), + 0 + ); + + this._RED.init(server, { + logging: { console: { level: 'off' } }, + }); + + server.listen(this._listenPort, this._address); + + server.on('listening', () => { + this._port = server.address().port; + this._comms.start(); + this._server = server; + resolve(); + }); + + server.on('error', reject); + }); + + if (done) done(); + } catch (err) { + if (done) done(err); + else throw err; + } } - - //TODO consider saving TCP handshake/server reinit on start/stop/start sequences - stopServer(done) { - if (this._server) { - try { - // internal API - this._comms.stop(); - this._server.stop(done); - } catch (e) { - done(); + + async stopServer(done) { + try { + if (this._server) { + await new Promise((resolve, reject) => { + this._comms.stop(); + + this._server.stop((err) => { + if (err) reject(err); + else resolve(); + }); + }); } - } else { - done(); + + if (done) done(); + } catch (err) { + if (done) done(err); + else throw err; } }