diff options
Diffstat (limited to 'src/ngMock')
| -rw-r--r-- | src/ngMock/angular-mocks.js | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/src/ngMock/angular-mocks.js b/src/ngMock/angular-mocks.js index 8c5686ac..1f96c1e5 100644 --- a/src/ngMock/angular-mocks.js +++ b/src/ngMock/angular-mocks.js @@ -587,6 +587,57 @@ angular.mock.$LogProvider = function() { angular.mock.TzDate.prototype = Date.prototype; })(); +/** + * @ngdoc function + * @name angular.mock.createMockWindow + * @description + * + * This function creates a mock window object useful for controlling access ot setTimeout, but mocking out + * sufficient window's properties to allow Angular to execute. + * + * @example + * + * <pre> + beforeEach(module(function($provide) { + $provide.value('$window', window = angular.mock.createMockWindow()); + })); + + it('should do something', inject(function($window) { + var val = null; + $window.setTimeout(function() { val = 123; }, 10); + expect(val).toEqual(null); + window.setTimeout.expect(10).process(); + expect(val).toEqual(123); + }); + * </pre> + * + */ +angular.mock.createMockWindow = function() { + var mockWindow = {}; + var setTimeoutQueue = []; + + mockWindow.document = window.document; + mockWindow.getComputedStyle = angular.bind(window, window.getComputedStyle); + mockWindow.scrollTo = angular.bind(window, window.scrollTo); + mockWindow.navigator = window.navigator; + mockWindow.setTimeout = function(fn, delay) { + setTimeoutQueue.push({fn: fn, delay: delay}); + }; + mockWindow.setTimeout.queue = setTimeoutQueue; + mockWindow.setTimeout.expect = function(delay) { + if (setTimeoutQueue.length > 0) { + return { + process: function() { + setTimeoutQueue.shift().fn(); + } + }; + } else { + expect('SetTimoutQueue empty. Expecting delay of ').toEqual(delay); + } + }; + + return mockWindow; +}; /** * @ngdoc function |
