diff options
Diffstat (limited to 'src/ngMock/angular-mocks.js')
| -rw-r--r-- | src/ngMock/angular-mocks.js | 38 | 
1 files changed, 26 insertions, 12 deletions
| diff --git a/src/ngMock/angular-mocks.js b/src/ngMock/angular-mocks.js index 07673802..be71e326 100644 --- a/src/ngMock/angular-mocks.js +++ b/src/ngMock/angular-mocks.js @@ -937,7 +937,7 @@ function createHttpBackendMock($rootScope, $delegate, $browser) {    }    // TODO(vojta): change params to: method, url, data, headers, callback -  function $httpBackend(method, url, data, callback, headers) { +  function $httpBackend(method, url, data, callback, headers, timeout) {      var xhr = new MockXhr(),          expectation = expectations[0],          wasExpected = false; @@ -948,6 +948,28 @@ function createHttpBackendMock($rootScope, $delegate, $browser) {            : angular.toJson(data);      } +    function wrapResponse(wrapped) { +      if (!$browser && timeout && timeout.then) timeout.then(handleTimeout); + +      return handleResponse; + +      function handleResponse() { +        var response = wrapped.response(method, url, data, headers); +        xhr.$$respHeaders = response[2]; +        callback(response[0], response[1], xhr.getAllResponseHeaders()); +      } + +      function handleTimeout() { +        for (var i = 0, ii = responses.length; i < ii; i++) { +          if (responses[i] === handleResponse) { +            responses.splice(i, 1); +            callback(-1, undefined, ''); +            break; +          } +        } +      } +    } +      if (expectation && expectation.match(method, url)) {        if (!expectation.matchData(data))          throw Error('Expected ' + expectation + ' with different data\n' + @@ -961,11 +983,7 @@ function createHttpBackendMock($rootScope, $delegate, $browser) {        expectations.shift();        if (expectation.response) { -        responses.push(function() { -          var response = expectation.response(method, url, data, headers); -          xhr.$$respHeaders = response[2]; -          callback(response[0], response[1], xhr.getAllResponseHeaders()); -        }); +        responses.push(wrapResponse(expectation));          return;        }        wasExpected = true; @@ -976,13 +994,9 @@ function createHttpBackendMock($rootScope, $delegate, $browser) {        if (definition.match(method, url, data, headers || {})) {          if (definition.response) {            // if $browser specified, we do auto flush all requests -          ($browser ? $browser.defer : responsesPush)(function() { -            var response = definition.response(method, url, data, headers); -            xhr.$$respHeaders = response[2]; -            callback(response[0], response[1], xhr.getAllResponseHeaders()); -          }); +          ($browser ? $browser.defer : responsesPush)(wrapResponse(definition));          } else if (definition.passThrough) { -          $delegate(method, url, data, callback, headers); +          $delegate(method, url, data, callback, headers, timeout);          } else throw Error('No response defined !');          return;        } | 
