diff --git a/src/ngResource/resource.js b/src/ngResource/resource.js index 4c37ad48ce62..46642157db20 100644 --- a/src/ngResource/resource.js +++ b/src/ngResource/resource.js @@ -568,8 +568,10 @@ angular.module('ngResource', ['ng']). undefined; forEach(action, function(value, key) { - if (key != 'params' && key != 'isArray' && key != 'interceptor') { + if (key != 'params' && key != 'isArray' && key != 'interceptor' && key != 'timeout') { httpConfig[key] = copy(value); + } else if (key == 'timeout') { + httpConfig[key] = value; } }); diff --git a/test/ngResource/resourceSpec.js b/test/ngResource/resourceSpec.js index 0fa7fc52959b..b19bb53ddd0f 100644 --- a/test/ngResource/resourceSpec.js +++ b/test/ngResource/resourceSpec.js @@ -1308,7 +1308,7 @@ describe("resource", function() { }); describe('resource', function() { - var $httpBackend, $resource; + var $httpBackend, $resource, $q; beforeEach(module(function($exceptionHandlerProvider) { $exceptionHandlerProvider.mode('log'); @@ -1319,6 +1319,7 @@ describe('resource', function() { beforeEach(inject(function($injector) { $httpBackend = $injector.get('$httpBackend'); $resource = $injector.get('$resource'); + $q = $injector.get('$q'); })); @@ -1356,5 +1357,36 @@ describe('resource', function() { ); }); + it('If timeout promise is resolved, cancel the request', function() { + var canceler = $q.defer(); + + $httpBackend.when('GET', '/CreditCard').respond({data: '123'}); + + var CreditCard = $resource('/CreditCard', {}, { + query: { + method: 'GET', + timeout: canceler.promise + } + }); + + CreditCard.query(); + + canceler.resolve(); + expect(function() { $httpBackend.flush();}).toThrow(new Error("No pending request to flush !")); + + canceler = $q.defer(); + CreditCard = $resource('/CreditCard', {}, { + query: { + method: 'GET', + timeout: canceler.promise + } + }); + + CreditCard.query(); + expect(function() { $httpBackend.flush();}).not.toThrow(new Error("No pending request to flush !")); + + + }); + });