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

Angular Mocks Async

AngularJS ngMockE2E Async

Angular Mocks Async Info

⭐ Stars 12
🔗 Source Code github.com
🕒 Last Update 4 years ago
🕒 Created 6 years ago
🐞 Open Issues 7
➗ Star-Issue Ratio 2
😎 Author amoldavsky