File tree 2 files changed +40
-4
lines changed
2 files changed +40
-4
lines changed Original file line number Diff line number Diff line change @@ -106,19 +106,29 @@ angular.mock.$Browser = function() {
106
106
* @param {number= } number of milliseconds to flush. See {@link #defer.now}
107
107
*/
108
108
self . defer . flush = function ( delay ) {
109
+ var nextTime ;
110
+
109
111
if ( angular . isDefined ( delay ) ) {
110
- self . defer . now += delay ;
112
+ // A delay was passed so compute the next time
113
+ nextTime = self . defer . now + delay ;
111
114
} else {
112
115
if ( self . deferredFns . length ) {
113
- self . defer . now = self . deferredFns [ self . deferredFns . length - 1 ] . time ;
116
+ // No delay was passed so set the next time so that it clears the deferred queue
117
+ nextTime = self . deferredFns [ self . deferredFns . length - 1 ] . time ;
114
118
} else {
119
+ // No delay passed, but there are no deferred tasks so flush - indicates an error!
115
120
throw new Error ( 'No deferred tasks to be flushed' ) ;
116
121
}
117
122
}
118
123
119
- while ( self . deferredFns . length && self . deferredFns [ 0 ] . time <= self . defer . now ) {
124
+ while ( self . deferredFns . length && self . deferredFns [ 0 ] . time <= nextTime ) {
125
+ // Increment the time and call the next deferred function
126
+ self . defer . now = self . deferredFns [ 0 ] . time ;
120
127
self . deferredFns . shift ( ) . fn ( ) ;
121
128
}
129
+
130
+ // Ensure that the current time is correct
131
+ self . defer . now = nextTime ;
122
132
} ;
123
133
124
134
self . $$baseHref = '/' ;
Original file line number Diff line number Diff line change @@ -296,8 +296,10 @@ describe('ngMock', function() {
296
296
expect ( counter ) . toBe ( 1 ) ;
297
297
298
298
$interval . flush ( 1000 ) ;
299
-
300
299
expect ( counter ) . toBe ( 2 ) ;
300
+
301
+ $interval . flush ( 2000 ) ;
302
+ expect ( counter ) . toBe ( 4 ) ;
301
303
} ) ) ;
302
304
303
305
@@ -692,6 +694,30 @@ describe('ngMock', function() {
692
694
$timeout . flush ( 123 ) ;
693
695
expect ( count ) . toBe ( 2 ) ;
694
696
} ) ) ;
697
+
698
+ it ( 'should resolve timeout functions following the timeline' , inject ( function ( $timeout ) {
699
+ var count1 = 0 , count2 = 0 ;
700
+ var iterate1 = function ( ) {
701
+ count1 ++ ;
702
+ $timeout ( iterate1 , 100 ) ;
703
+ } ;
704
+ var iterate2 = function ( ) {
705
+ count2 ++ ;
706
+ $timeout ( iterate2 , 150 ) ;
707
+ } ;
708
+
709
+ $timeout ( iterate1 , 100 ) ;
710
+ $timeout ( iterate2 , 150 ) ;
711
+ $timeout . flush ( 150 ) ;
712
+ expect ( count1 ) . toBe ( 1 ) ;
713
+ expect ( count2 ) . toBe ( 1 ) ;
714
+ $timeout . flush ( 50 ) ;
715
+ expect ( count1 ) . toBe ( 2 ) ;
716
+ expect ( count2 ) . toBe ( 1 ) ;
717
+ $timeout . flush ( 400 ) ;
718
+ expect ( count1 ) . toBe ( 6 ) ;
719
+ expect ( count2 ) . toBe ( 4 ) ;
720
+ } ) ) ;
695
721
} ) ;
696
722
697
723
You can’t perform that action at this time.
0 commit comments