UNPKG

angular-mocks-async

Version:
7 lines 3.45 kB
(function(ng){var httpMock=ng.module("ngMockE2EAsync",["ngMockE2E"]);ng.mock.$HttpBackendAsyncDecorator=["$rootScope","$q","$delegate","$browser",createHttpBackendAsyncMock];function createHttpBackendAsyncMock($rootScope,$q,$delegate,$browser){var definnitionsAsync=[];function $httpBackendAsync(method,url,data,callback,headers,timeout,withCredentials){var d=match(method,url,data,headers);if(!d||d.passThrough||!d.getPromise)return $delegate.call(this,method,url,data,callback,headers,timeout,withCredentials); if(!d.getPromise||!typeof d.getPromise==="function")throw"unexpected response: "+d.getPromise;var interceptor=function(){var whenAsyncConfig=ng.copy(d);delete whenAsyncConfig.getPromise;var promise=d.getPromise(method,url,data,headers,whenAsyncConfig);if(!promise||typeof promise.then!=="function")throw"unexpected response: "+promise;promise.then(function(response){if(!response)throw"response was unexpected: "+response;callback.apply(this,response)})};return $delegate.call(this,method,url,data,interceptor, headers)}for(var key in $delegate)$httpBackendAsync[key]=$delegate[key];function match(method,url,data,headers){var defs=definnitionsAsync;for(var i=-1;++i<defs.length;){var def=definnitionsAsync[i];if(def.method.toUpperCase()===method.toUpperCase())if(matchUrl(def.url,url)&&(!angular.isDefined(data)||matchData(def.data,data))&&(!angular.isDefined(headers)||matchHeaders(def.headers,headers)))return def}}function matchUrl(url,u){if(!url)return true;if(angular.isFunction(url.test))return url.test(u); if(angular.isFunction(url))return url(u);return url==u}function matchHeaders(headers,h){if(angular.isUndefined(headers))return true;if(angular.isFunction(headers))return headers(h);return angular.equals(headers,h)}function matchData(data,d){if(angular.isUndefined(data))return true;if(data&&angular.isFunction(data.test))return data.test(d);if(data&&angular.isFunction(data))return data(d);if(data&&!angular.isString(data))return angular.equals(angular.fromJson(angular.toJson(data)),angular.fromJson(d)); return data==d}function argumentsToArray(arguments){var array=[];for(var i=0,len=arguments.length;i<len;i++)array.push(arguments[i]);return array}$httpBackendAsync.whenAsync=function(){return whenAsync.apply($httpBackendAsync,[$delegate.when].concat(argumentsToArray(arguments)))};$httpBackendAsync.expectAsync=function(){return expectAsync.apply($httpBackendAsync,[$delegate.expect].concat(argumentsToArray(arguments)))};var expectAsync=whenAsync;function whenAsync(deletageMethod,method,url,data,headers, keys){function MockHttpExpectation(method,url,data,headers,keys,promiseFn){this.method=method;this.url=url;this.data=data;this.header=headers;this.keys=keys;this.getPromise=promiseFn}var def=new MockHttpExpectation(method,url,data,headers,keys,null);var chain=deletageMethod.call($delegate,method,url,data,headers);var ret={respond:function(response){if(response){if(typeof response==="function")def.getPromise=response;else if(response.then&&typeof response.then==="function")def.getPromise=function(method, url,data,headers,keys){return response};else throw"unexpected response "+response;chain.respond.apply(chain,function(){})}else chain.respond.apply(chain,arguments);return ret},passThrough:function(){}};definnitionsAsync.push(def);return ret}return $httpBackendAsync}httpMock.config(["$provide",function($provide){$provide.decorator("$httpBackend",angular.mock.$HttpBackendAsyncDecorator)}])})(angular);