Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/amoldavsky/angular-mocks-async

AngularJS ngMockE2E Async
https://github.com/amoldavsky/angular-mocks-async

angular angular-mocks angular-testing angular1 e2e httpbackend mock mocks ngmock ngmocke2e promise

Last synced: 4 months ago
JSON representation

AngularJS ngMockE2E Async

Awesome Lists containing this project

README

        

# angular-mocks-async
AngularJS ngMockE2E Async


[![CircleCI](https://circleci.com/gh/amoldavsky/angular-mocks-async/tree/master.svg?style=shield)](https://circleci.com/gh/amoldavsky/angular-mocks-async)
[![codecov](https://codecov.io/gh/amoldavsky/angular-mocks-async/branch/master/graph/badge.svg)](https://codecov.io/gh/amoldavsky/angular-mocks-async)



Tested for:

![npm](https://img.shields.io/badge/angular-1.3.17-blue.svg)
![npm](https://img.shields.io/badge/angular-1.4.0-blue.svg)
![npm](https://img.shields.io/badge/angular-1.5.0-blue.svg)
![npm](https://img.shields.io/badge/angular-1.6.0-blue.svg)


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](https://jsfiddle.net/amoldavsky/omw8m23L/) [Plunker](https://plnkr.co/edit/IWtaW9?p=preview)

## Install

#### NPM
```
npm install angular-mocks-async
```

#### HTML
```html

```

## Usage

The decorator exposes a new API
```javascript
$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
```javascript
(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