From 6f2eee1f03ce44a5f6bfb35290d74f28c7ad818c Mon Sep 17 00:00:00 2001 From: Richard van der Hoff Date: Wed, 14 Jun 2017 16:07:40 +0100 Subject: [PATCH] Attempts to deflakify the joining test Treat the waitTime passed into `flush` as a timeout rather than a time-between-loops, so that we can pass in bigger times and not slow the tests down too much. Bump the timeout when waiting for /publicRooms and /initialSync in the joining test. --- test/app-tests/joining.js | 10 ++++++---- test/mock-request.js | 10 +++++----- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/test/app-tests/joining.js b/test/app-tests/joining.js index e835ebb9..0aeb081a 100644 --- a/test/app-tests/joining.js +++ b/test/app-tests/joining.js @@ -68,7 +68,7 @@ describe('joining a room', function () { } }); - it('should not get stuck at a spinner', function(done) { + it('should not get stuck at a spinner', function() { var ROOM_ALIAS = '#alias:localhost'; var ROOM_ID = '!id:localhost'; @@ -140,12 +140,14 @@ describe('joining a room', function () { .respond(401, {errcode: 'M_GUEST_ACCESS_FORBIDDEN'}); return q.all([ - httpBackend.flush('/directory/room/'+encodeURIComponent(ROOM_ALIAS)), - httpBackend.flush('/rooms/'+encodeURIComponent(ROOM_ID)+"/initialSync"), + httpBackend.flush('/directory/room/'+encodeURIComponent(ROOM_ALIAS), 1, 200), + httpBackend.flush('/rooms/'+encodeURIComponent(ROOM_ID)+"/initialSync", 1, 200), ]); }).then(() => { httpBackend.verifyNoOutstandingExpectation(); + return q.delay(1); + }).then(() => { // we should now have a roomview, with a preview bar roomView = ReactTestUtils.findRenderedComponentWithType( matrixChat, RoomView); @@ -208,7 +210,7 @@ describe('joining a room', function () { }).then(() => { // now the room should have loaded expect(roomView.state.room).toExist(); - }).done(done, done); + }); }); }); }); diff --git a/test/mock-request.js b/test/mock-request.js index c5830110..46d16582 100644 --- a/test/mock-request.js +++ b/test/mock-request.js @@ -46,9 +46,8 @@ HttpBackend.prototype = { const defer = q.defer(); const self = this; let flushed = 0; - let triedWaiting = false; if (waitTime === undefined) { - waitTime = 5; + waitTime = 10; } function log(msg) { @@ -60,6 +59,8 @@ HttpBackend.prototype = { + " waitTime=" + waitTime + ")", ); + const endTime = waitTime + Date.now(); + const tryFlush = function() { // if there's more real requests and more expected requests, flush 'em. log(` trying to flush => reqs=[${self.requests}] ` + @@ -75,12 +76,11 @@ HttpBackend.prototype = { log(` flushed. Trying for more.`); setTimeout(tryFlush, 0); } - } else if (flushed === 0 && !triedWaiting) { + } else if (flushed === 0 && Date.now() < endTime) { // we may not have made the request yet, wait a generous amount of // time before giving up. log(` nothing to flush yet; waiting for requests.`); - setTimeout(tryFlush, waitTime); - triedWaiting = true; + setTimeout(tryFlush, 5); } else { if (flushed === 0) { log("nothing to flush; giving up");