diff --git a/src/ngMock/angular-mocks.js b/src/ngMock/angular-mocks.js index 05fdc4edd8e1..d0c1b9b2c89b 100644 --- a/src/ngMock/angular-mocks.js +++ b/src/ngMock/angular-mocks.js @@ -105,16 +105,17 @@ angular.mock.$Browser = function() { */ self.defer.flush = function(delay) { var flushedSomething = false; + now = self.defer.now; if (angular.isDefined(delay)) { - self.defer.now += delay; + now += delay; } else { if (self.deferredFns.length) { - self.defer.now = self.deferredFns[self.deferredFns.length-1].time; + now = self.deferredFns[self.deferredFns.length-1].time; } } - while (self.deferredFns.length && self.deferredFns[0].time <= self.defer.now) { + while (self.deferredFns.length && self.deferredFns[0].time <= now) { flushedSomething = true; self.deferredFns.shift().fn(); } @@ -126,6 +127,8 @@ angular.mock.$Browser = function() { throw Error('No deferred tasks with delay up to ' + delay + 'ms to be flushed!') } } + + self.defer.now = now; }; /** diff --git a/test/ngMock/angular-mocksSpec.js b/test/ngMock/angular-mocksSpec.js index 88e1876ff983..67fd13a131fd 100644 --- a/test/ngMock/angular-mocksSpec.js +++ b/test/ngMock/angular-mocksSpec.js @@ -404,7 +404,7 @@ describe('ngMock', function() { expect(function() {$timeout.flush(100);}).toThrow(); expect(log).toEqual(['t1']); - $timeout.flush(900); + $timeout.flush(1000); expect(log).toEqual(['t1', 't2']); expect(function() {$timeout.flush();}).toThrow(); }); @@ -425,6 +425,21 @@ describe('ngMock', function() { }); + it('should not update the current time if an exception is thrown during a flush', function() { + $timeout(log.fn('t1'), 100); + $timeout(log.fn('t2'), 101); + + expect(function() { $timeout.flush(90); }).toThrow(); + expect(function() { $timeout.flush(90); }).toThrow(); + + $timeout.flush(100); + expect(log).toEqual(['t1']); + + $timeout.flush(1); + expect(log).toEqual(['t1', 't2']); + }); + + describe('verifyNoPendingTasks', function() { it('should throw an exception when not flushed', function() {