Injecting mock service
Using $provide
by eitanp461
HTML
<script src="http://pivotal.github.io/jasmine/lib/jasmine-1.3.1/jasmine.js"></script>
<script src="http://pivotal.github.io/jasmine/lib/jasmine-1.3.1/jasmine-html.js"></script>
<link rel="stylesheet" href="http://pivotal.github.io/jasmine/lib/jasmine-1.3.1/jasmine.css">
<script src="http://code.angularjs.org/1.0.5/angular.js"></script>
<script src="http://code.angularjs.org/1.0.5/angular-mocks.js"></script>
JavaScript
//--- CODE --------------------------
var myApp = angular.module('myApp', []);
// Create a map-based configuration service
myApp.service('ConfigurationService', function () {
var map = { 'key' : 'real value'};
this.get = function (key) {
return map[key];
}
});
// Create a service with dependencies
myApp.provider('MyService', function () {
this.$get = ['ConfigurationService',
function (ConfigurationService) {
return {
foo: function (key) {
// Get value from configuration service dependency
return ConfigurationService.get(key);
}
};
}];
});
// --- SPECS -------------------------
describe('myApp', function () {
beforeEach(function () {
// Initialize myApp injector
module('myApp');
});
describe('MyService', function() {
beforeEach(function () {
// Replace ConfigurationService injector with mock implementation
ConfigurationServiceMock = jasmine.createSpyObj('ConfigurationService', ['get']);
module(function ($provide) {
$provide.value('ConfigurationService', ConfigurationServiceMock);
});
});
it('uses the mock configuration service', inject(function (MyService) {
ConfigurationServiceMock.get.andReturn('mock data1');
expect(MyService.foo('key')).toEqual('mock data1');
}));
it('injects the mock configuration service anywhere', inject(function (ConfigurationService) {
ConfigurationServiceMock.get.andReturn('mock data2');
expect(ConfigurationService.get('key')).toEqual('mock data2');
}));
});
describe('ConfigurationService', function() {
it('uses the real configuration service', inject(function (ConfigurationService) {
expect(ConfigurationService.get('key')).toEqual('real value');
}));
});
});
// --- Runner...