Skip to content
This repository has been archived by the owner on Sep 2, 2024. It is now read-only.

Monsido/angular-mocks-async

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

40 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

angular-mocks-async

AngularJS ngMockE2E Async

Angular 1.3.0 CircleCI

Angular 1.5.8 CircleCI

codecov

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;

		});
		
		$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.

License

MIT

About

AngularJS ngMockE2E Async

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 100.0%