angular-mocks-async

AngularJS module to mock async HTTP

Downloads in past

Stats

StarsIssuesVersionUpdatedCreatedSize
angular-mocks-async
1271.0.35 years ago5 years agoMinified + gzip package size for angular-mocks-async in KB

Readme

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

<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