From f0c6ebc07653f6267acec898ccef5677884e3081 Mon Sep 17 00:00:00 2001 From: petrovalex Date: Sat, 15 Sep 2012 19:02:10 +0300 Subject: feat($timeout-mock): add verifyNoPendingTasks method added verifyNoPendingTasks method, which throws error if not all deferred tasks have been flushed Closes #1245 --- src/ngMock/angular-mocks.js | 60 ++++++++++++++++++++++++++++++++------------- 1 file changed, 43 insertions(+), 17 deletions(-) (limited to 'src/ngMock/angular-mocks.js') diff --git a/src/ngMock/angular-mocks.js b/src/ngMock/angular-mocks.js index 647a01fe..7f31a582 100644 --- a/src/ngMock/angular-mocks.js +++ b/src/ngMock/angular-mocks.js @@ -1328,17 +1328,49 @@ function MockXhr() { * @description * * This service is just a simple decorator for {@link ng.$timeout $timeout} service - * that adds a "flush" method. - */ + * that adds a "flush" and "verifyNoPendingTasks" methods. + */ -/** - * @ngdoc method - * @name ngMock.$timeout#flush - * @methodOf ngMock.$timeout - * @description - * - * Flushes the queue of pending tasks. - */ +angular.mock.$TimeoutDecorator = function($delegate, $browser) { + + /** + * @ngdoc method + * @name ngMock.$timeout#flush + * @methodOf ngMock.$timeout + * @description + * + * Flushes the queue of pending tasks. + */ + $delegate.flush = function() { + $browser.defer.flush(); + }; + + /** + * @ngdoc method + * @name ngMock.$timeout#verifyNoPendingTasks + * @methodOf ngMock.$timeout + * @description + * + * Verifies that there are no pending tasks that need to be flushed. + */ + $delegate.verifyNoPendingTasks = function() { + if ($browser.deferredFns.length) { + throw Error('Deferred tasks to flush (' + $browser.deferredFns.length + '): ' + + formatPendingTasksAsString($browser.deferredFns)); + } + }; + + function formatPendingTasksAsString(tasks) { + var result = []; + angular.forEach(tasks, function(task) { + result.push('{id: ' + task.id + ', ' + 'time: ' + task.time + '}'); + }); + + return result.join(', '); + } + + return $delegate; +}; /** * @@ -1364,15 +1396,9 @@ angular.module('ngMock', ['ng']).provider({ $httpBackend: angular.mock.$HttpBackendProvider, $rootElement: angular.mock.$RootElementProvider }).config(function($provide) { - $provide.decorator('$timeout', function($delegate, $browser) { - $delegate.flush = function() { - $browser.defer.flush(); - }; - return $delegate; - }); + $provide.decorator('$timeout', angular.mock.$TimeoutDecorator); }); - /** * @ngdoc overview * @name ngMockE2E -- cgit v1.2.3