From 9f4f5937112655a9881d3281da8e72035bc8b180 Mon Sep 17 00:00:00 2001 From: David Bennett Date: Sat, 27 Apr 2013 11:22:03 -0400 Subject: feat($http): add support for aborting via timeout promises If the timeout argument is a promise, abort the request when it is resolved. Implemented by adding support to $httpBackend service and $httpBackend mock service. This api can also be used to explicitly abort requests while keeping the communication between the deffered and promise unidirectional. Closes #1159 --- test/ng/httpBackendSpec.js | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) (limited to 'test/ng/httpBackendSpec.js') diff --git a/test/ng/httpBackendSpec.js b/test/ng/httpBackendSpec.js index da4fed16..c65ab2e1 100644 --- a/test/ng/httpBackendSpec.js +++ b/test/ng/httpBackendSpec.js @@ -117,6 +117,44 @@ describe('$httpBackend', function() { }); + it('should abort request on timeout promise resolution', inject(function($timeout) { + callback.andCallFake(function(status, response) { + expect(status).toBe(-1); + }); + + $backend('GET', '/url', null, callback, {}, $timeout(noop, 2000)); + xhr = MockXhr.$$lastInstance; + spyOn(xhr, 'abort'); + + $timeout.flush(); + expect(xhr.abort).toHaveBeenCalledOnce(); + + xhr.status = 0; + xhr.readyState = 4; + xhr.onreadystatechange(); + expect(callback).toHaveBeenCalledOnce(); + })); + + + it('should not abort resolved request on timeout promise resolution', inject(function($timeout) { + callback.andCallFake(function(status, response) { + expect(status).toBe(200); + }); + + $backend('GET', '/url', null, callback, {}, $timeout(noop, 2000)); + xhr = MockXhr.$$lastInstance; + spyOn(xhr, 'abort'); + + xhr.status = 200; + xhr.readyState = 4; + xhr.onreadystatechange(); + expect(callback).toHaveBeenCalledOnce(); + + $timeout.flush(); + expect(xhr.abort).not.toHaveBeenCalled(); + })); + + it('should cancel timeout on completion', function() { callback.andCallFake(function(status, response) { expect(status).toBe(200); -- cgit v1.2.3