Skip to content

amoldavsky/angular-mocks-async

Repository files navigation

angular-mocks-async

AngularJS ngMockE2E Async

CircleCI codecov

Tested for:

npm npm npm npm

An abstraction on top of ngMockE2E to support async calls using promises.

If you need to make an async operation ( such as working with WebSQL / IndexedDB ) the orignial ngMockE2E will fall through and you will never have the chance to respond with your own response.

ngMockE2EAsync decorates the $httpBackend by utilizing promises. Responses can now be in a form of a promise where the $httpBackend will original function will not be called until your promise has been resolved. Once resolved the original $httpBackend APIs will be called and things will flow their natural ways back to the caller.

Demo

jsFiddle Plunker

Install

NPM

npm install angular-mocks-async

HTML

<script src="angular.js"></script>
<script src="angular-mocks.js"></script>
<script src="//cdn.rawgit.com/amoldavsky/angular-mocks-async/master/src/angular-mocks-async.js"></script>

Usage

The decorator exposes a new API

	$httpBackend.whenAsync()

Which is equivalent to the $httpBackend.when() API but expects a promise in the .respond() function.

Here is an example for an HTTP GET

(function( ng ) {

	var app = ng.module('myApp', ['ngMockE2E', 'ngMockE2EAsync'])
	
	app.run( [ '$httpBackend', '$q', function( $httpBackend, $q ) {

		$httpBackend.whenAsync(
			    'GET',
			    new RegExp( 'http://api.example.com/user/.+$' )
		).respond( function( method, url, data, config ) {

			var re = /.*\/user\/(\w+)/;
			var userId = parseInt(url.replace(re, '$1'), 10);

			var response = $q.defer();

			setTimeout( function() {
			    var data = {
				userId: userId
			    };
			    response.resolve( [ 200, "this is a mocked async GET response", "123" ] );
			}, 1000 );

			return response.promise;

		});
		$httpBackend.whenGET(/.*/).passThrough();
	        $httpBackend.whenPOST(/.*/).passThrough();
	        $httpBackend.whenPUT(/.*/).passThrough();
	        $httpBackend.whenJSONP(/.*/).passThrough();
	        $httpBackend.whenDELETE(/.*/).passThrough();
		
		$http({
			url: "http://api.example.com/user/103",
			method: 'GET'
		}).then( function( response ) {
			alert( response.data );
		});
	}]);
}(angular);

You may use this API the same way for POST, PUT, UPDATE, and DELETE.

Details

The code adds a custom decorator function to the existing angular mock namespace which already hold similar decorator functions - angular.mock.$HttpBackendAsyncDecorator.

Developing & Testing

gulpfile.js has the following tasks:

dist
test-unminified
test-minified

Please be sure to run these tests when making changes

License

MIT

Packages

No packages published

Contributors 3

  •  
  •  
  •  
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy