From 62ce61835122f7c72e8ed3289e498a38a19ca28b Mon Sep 17 00:00:00 2001 From: Huan LI Date: Mon, 22 May 2017 20:25:47 +0800 Subject: [PATCH] fix(test): clearTimeout for prevent race condition(?) --- test/puppet-web/puppet-web.spec.ts | 36 +++++++++++++----------------- 1 file changed, 15 insertions(+), 21 deletions(-) diff --git a/test/puppet-web/puppet-web.spec.ts b/test/puppet-web/puppet-web.spec.ts index ea6777ac..7c98b3da 100644 --- a/test/puppet-web/puppet-web.spec.ts +++ b/test/puppet-web/puppet-web.spec.ts @@ -10,18 +10,9 @@ import { test } from 'ava' import { Config, log, -} from '../../src/config' -// import { Message } from '../../src/message' +} from '../../src/config' import PuppetWeb from '../../src/puppet-web' -import Server from '../../src/puppet-web/server' - -// import { spy } from 'sinon' - -// process.on('unhandledRejection', (reason, p) => { -// console.log('!!!!!!! unhandledRejection in puppet-web.spec.ts') -// console.log('Unhandled Rejection at: Promise', p, 'reason:', reason) -// console.log('!!!!!!!') -// }) +import PuppetWebServer from '../../src/puppet-web/server' /** * the reason why use `test.serial` here is: @@ -56,25 +47,25 @@ test.serial('login/logout events', async t => { }) test.serial('server/browser socketio ding', async t => { - const pw = new PuppetWeb() - t.truthy(pw, 'should instantiated a PuppetWeb') + const puppet = new PuppetWeb() + t.truthy(puppet, 'should instantiated a PuppetWeb') - Config.puppetInstance(pw) + Config.puppetInstance(puppet) const EXPECTED_DING_DATA = 'dingdong' try { - await pw.init() + await puppet.init() t.pass('should be inited') - const ret = await dingSocket(pw.server) + const ret = await dingSocket(puppet.server) t.is(ret, EXPECTED_DING_DATA, 'should got EXPECTED_DING_DATA after resolved dingSocket()') } catch (e) { t.fail(e && e.message || e || 'unknown exception???') } try { - await pw.quit() + await puppet.quit() } catch (err) { t.fail(err.message) } @@ -83,17 +74,17 @@ test.serial('server/browser socketio ding', async t => { ///////////////////////////////////////////////////////////////////////////// - function dingSocket(server: Server) { + function dingSocket(server: PuppetWebServer) { const maxTime = 60000 // 60s const waitTime = 3000 let totalTime = 0 return new Promise((resolve, reject) => { log.verbose('TestPuppetWeb', 'dingSocket()') - setTimeout(_ => { - return reject('dingSocket() no response timeout after ' + 2 * maxTime) + const timeoutTimer = setTimeout(_ => { + reject('dingSocket() no response timeout after ' + 2 * maxTime) }, 2 * maxTime) - .unref() + timeoutTimer.unref() testDing() return @@ -113,7 +104,10 @@ test.serial('server/browser socketio ding', async t => { log.silly('TestPuppetWeb', 'dingSocket() server.socketClient: %s', server.socketClient) server.socketClient.once('dong', data => { log.verbose('TestPuppetWeb', 'socket recv event dong: ' + data) + + clearTimeout(timeoutTimer) return resolve(data) + }) server.socketClient.emit('ding', EXPECTED_DING_DATA) } -- GitLab