Skip to content

maciej-gurban/angular-mockingbird

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Angular Mockingbird

Simplified dependency injection and service mocking.

Installation

npm install angular-mockingbird --save-dev

Dependencies

Usage

Importing

You'll need to include ./dist/mockingbird.js into files section in your karma.conf.js for the module to be available in your tests. Mockingbird needs to be imported after both Angular and Angular Mocks have been imported. Example:

files: [
  './node_modules/angular/angular.js',
  './node_modules/angular-mocks/angular-mocks.js',
  './node_modules/angular-mockingbird/dist/mockingbird.js',
  ...
  // your test files
]

Initialization

// Import using Browserify (ES5):
var Mockingbird = require('angular-mockingbird');
// or using JS Modules (ES6):
import Mockingbird from 'angular-mockingbird';

var am = new Mockingbird();

Injection

The inject() method returns an object; each service (or other injectable) is a property of that object, and is available at key matching requested service name.

Syntax

am.inject(arg1[, arg][, ...]);

Parameters

  • arg1, arg2, ... - Names of injectables to return.
// Without Mockingbird
var ServiceFoo, ServiceBar;      
beforeEach(inject(function(_ServiceFoo_, _ServiceBar_) {
  ServiceFoo = _ServiceFoo_;
  ServiceBar = _ServiceBar_;
});
// Access each as 'ServiceFoo', 'ServiceBar'

// With Mockingbird
var di;
beforeEach(function() {
  di = am.inject(
    'ServiceFoo',
    'ServiceBar'
  );
});
// Access each as 'di.ServiceFoo', 'di.ServiceBar'

Mocking

The mock() method replaces all functions found in object properties with Jasmine spies. This method mutates the object passed to it.

Syntax

am.mock(arg);

Parameters

  • arg - Service object (injected previously)
// Example service
app.service(ServiceFoo, function() {
  this.foo = function() {};
  this.bar = function() {};
  this.baz = function() {};
});

// Without Mockingbird
spyOn(ServiceFoo, 'foo').and.stub();
spyOn(ServiceFoo, 'bar').and.stub();
spyOn(ServiceFoo, 'baz').and.stub();

// With Mockingbird
am.mock(di.ServiceFoo);

Putting it all together

describe('test', function() {
  let am, di;
  beforeEach(module('myApp'));
  beforeEach(function() {
    am = new Mockingbird();
    di = am.inject(
      'ServiceFoo',
      'ServiceBar'
    );
    am.mock(di.ServiceBar);
  }):
  it('should do something', function() {
    di.ServiceFoo.foo();
    expect(di.ServiceFoo.foo).toHaveBeenCalled();
  });
});

Notes

To make it clear when we are dealing with service mocks, and when with their actual implementations, the following pattern could be used:

di = am.inject(
  'ServiceFoo'
);
mock = am.inject(
  'ServiceBar'
);
am.mock(mock.ServiceBar);

Development & testing

Start to pulling in all the dependencies:

npm install

To run the tests, execute in the root of the project:

npm test

About

Simplified dependency injection and service mocking.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published