🚀 Big News: Socket Acquires Coana to Bring Reachability Analysis to Every Appsec Team.Learn more
Socket
Book a DemoInstallSign in
Socket

angular-spies

Package Overview
Dependencies
Maintainers
1
Versions
6
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

angular-spies

Spies For Your Angular Tests TDD

1.0.5
latest
Source
npm
Version published
Weekly downloads
1
-66.67%
Maintainers
1
Weekly downloads
 
Created
Source

angular-spies

Status: Build Status npm version npm downloads

Super easy spy setup and injection library.

If you ever wrote Angular tests, especially in TDD style (Test Driven Development), you know you need Spies (also known by their other misused name: mocks).

You need them to isolate your units (services, controllers, etc...) from their dependencies (other services).

Usually it involves tons of boilerplate code but NO MORE!

Dependencies

  • Angular 1.x
  • angular-mocks 1.x (same version as Angular)
  • Jasmine 2.x and above (spies are jasmine.createSpy)

Installation

npm install angular-spies

or

bower install angular-spies

Usage

Define a Spy

angular.spyOnService( serviceName, [ optionalParentSpy, ...])

angular
	.spyOnService('productService')

Defining Methods

.methods( methodName, ...)

angular
	.spyOnService('productService')
	.methods('getProducts', 'saveProducts')

Inject a Spy in your test

injectSpy( serviceName ) { }


var productCtrl,
	productServiceSpy;

beforeEach( injectSpy( function(productService) {
	
	productServiceSpy = productService; 
}));

it ('should get products', function(){
	
	var fakeProducts = ['product1', 'product2'];
	
	productServiceSpy.getProducts.and.returnValue( fakeProducts );
	
	productCtrl.loadProducts();
	
	expect(productServiceSpy.getProducts).toHaveBeenCalled();
});

Async Methods (Return Promises)

.asyncMethods( methodName, ...)

angular
	.spyOnService('productService')
	.methods('someSyncMethod')
	.asyncMethods('getProducts', 'saveProducts')

Angular spies uses $q in the background to create both the promise as the return value, and exposes its deferred object, and allows you to control the promise's state.


it ('should get products async', function(){
	
	var fakeProducts = ['product1', 'product2'];
	
	var returnedProducts;
	
	productServiceSpy.getDeferred('getProducts').resolve( fakeProducts );
	
	productServiceSpy.getProducts().then(function (products) {
		returnedProducts = products;
	});
	
	$rootScope.flush();
	
	expect(productServiceSpy.getProducts).toHaveBeenCalled();
	
	expect(returnedProducts).toBe(fakeProducts);
	
});

Extending a Previously Defined Spy

Lets say for example that you have a generic spy for a data library, with all the CRUD methods defined already:

angular
	.spyOnService('dataService')
	.asyncMethods('create', 'read', 'update', 'delete')

You can use the second parameter of the spyOnService method to declare its parent spies, just add second parameter as an array of spy names you want to extend from (Like angular.module(moduleName, [depenedencies]))

angular
	.spyOnService('productService', ['dataService'])
	.asyncMethods('createProductByName')

Now the spy of productService will have 5 async methods - create, read, update, delete and createProductByName

Example Project

See the Example Project to get a quick look on how to test your controllers.

License

Copyright (c) 2015 HiRez.io

Licensed under the MIT License.

Keywords

angular

FAQs

Package last updated on 28 Sep 2015

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts