diff --git a/src/index.js b/src/index.js index d3df487..bd63dbb 100644 --- a/src/index.js +++ b/src/index.js @@ -7,31 +7,38 @@ const getPort = require('get-port'); const pify = require('pify'); const createCert = require('create-cert'); -const createTestServer = opts => Promise.all([ - getPort(), - getPort(), - createCert(opts && opts.certificate) -]) - .then(results => { - const port = results[0]; - const sslPort = results[1]; - const cert = results[2]; - +const createTestServer = opts => createCert(opts && opts.certificate) + .then(cert => { const app = express(); app.caCert = cert.caKeys.cert; - app.url = `http://localhost:${port}`; - app.sslUrl = `https://localhost:${sslPort}`; + Object.defineProperty(app, 'url', { + get: () => typeof app.port === 'undefined' ? undefined : `http://localhost:${app.port}` + }); + Object.defineProperty(app, 'sslUrl', { + get: () => typeof app.sslPort === 'undefined' ? undefined : `https://localhost:${app.sslPort}` + }); const server = http.createServer(app); const sslServer = https.createServer(cert.keys, app); app.listen = () => Promise.all([ - pify(server.listen.bind(server))(port), - pify(sslServer.listen.bind(sslServer))(sslPort) + getPort().then(port => { + app.port = port; + return pify(server.listen.bind(server))(port); + }), + getPort().then(sslPort => { + app.sslPort = sslPort; + return pify(sslServer.listen.bind(sslServer))(sslPort); + }) ]); + app.close = () => Promise.all([ - pify(server.close.bind(server))(), - pify(sslServer.close.bind(sslServer))() + pify(server.close.bind(server))().then(() => { + app.port = undefined; + }), + pify(sslServer.close.bind(sslServer))().then(() => { + app.sslPort = undefined; + }) ]); return app.listen().then(() => app);