diff --git a/src/ngMock/angular-mocks.js b/src/ngMock/angular-mocks.js index 1c96baa6b237..d52e6bcf0d1e 100644 --- a/src/ngMock/angular-mocks.js +++ b/src/ngMock/angular-mocks.js @@ -454,17 +454,17 @@ angular.mock.$LogProvider = function() { * @returns {promise} A promise which will be notified on each iteration. */ angular.mock.$IntervalProvider = function() { - this.$get = ['$rootScope', '$q', - function($rootScope, $q) { + this.$get = ['$browser', '$rootScope', '$q', '$$q', + function($browser, $rootScope, $q, $$q) { var repeatFns = [], nextRepeatId = 0, now = 0; var $interval = function(fn, delay, count, invokeApply) { - var deferred = $q.defer(), - promise = deferred.promise, - iteration = 0, - skipApply = (angular.isDefined(invokeApply) && !invokeApply); + var iteration = 0, + skipApply = (angular.isDefined(invokeApply) && !invokeApply), + deferred = (skipApply ? $$q : $q).defer(), + promise = deferred.promise; count = (angular.isDefined(count)) ? count : 0; promise.then(null, null, fn); @@ -487,7 +487,11 @@ angular.mock.$IntervalProvider = function() { } } - if (!skipApply) $rootScope.$apply(); + if (skipApply) { + $browser.defer.flush(); + } else { + $rootScope.$apply(); + } } repeatFns.push({ diff --git a/test/ngMock/angular-mocksSpec.js b/test/ngMock/angular-mocksSpec.js index 7d8999bc406a..68fb18eefadf 100644 --- a/test/ngMock/angular-mocksSpec.js +++ b/test/ngMock/angular-mocksSpec.js @@ -321,11 +321,15 @@ describe('ngMock', function() { inject(function($interval, $rootScope) { var applySpy = spyOn($rootScope, '$apply').andCallThrough(); - $interval(noop, 1000, 0, false); + var counter = 0; + $interval(function increment() { counter++; }, 1000, 0, false); + expect(applySpy).not.toHaveBeenCalled(); + expect(counter).toBe(0); $interval.flush(2000); expect(applySpy).not.toHaveBeenCalled(); + expect(counter).toBe(2); }));