Skip to content
This repository has been archived by the owner on Apr 12, 2024. It is now read-only.

Commit

Permalink
feat(ngMock): allow passing an object literal as shorthand to module
Browse files Browse the repository at this point in the history
  • Loading branch information
iammerrick authored and vojtajina committed Sep 3, 2013
1 parent 8e48c4f commit f737c97
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 3 deletions.
16 changes: 13 additions & 3 deletions src/ngMock/angular-mocks.js
Original file line number Diff line number Diff line change
Expand Up @@ -1851,9 +1851,11 @@ angular.mock.clearDataCache = function() {
*
* See {@link angular.mock.inject inject} for usage example
*
* @param {...(string|Function)} fns any number of modules which are represented as string
* @param {...(string|Function|Object)} fns any number of modules which are represented as string
* aliases or as anonymous module initialization functions. The modules are used to
* configure the injector. The 'ng' and 'ngMock' modules are automatically loaded.
* configure the injector. The 'ng' and 'ngMock' modules are automatically loaded. If an
* object literal is passed they will be register as values in the module, the key being
* the module name and the value being what is returned.
*/
window.module = angular.mock.module = function() {
var moduleFns = Array.prototype.slice.call(arguments, 0);
Expand All @@ -1865,7 +1867,15 @@ angular.mock.clearDataCache = function() {
} else {
var modules = currentSpec.$modules || (currentSpec.$modules = []);
angular.forEach(moduleFns, function(module) {
modules.push(module);
if (angular.isObject(module) && !angular.isArray(module)) {
modules.push(function($provide) {
angular.forEach(module, function(value, key) {
$provide.value(key, value);
});
});
} else {
modules.push(module);
}
});
}
}
Expand Down
36 changes: 36 additions & 0 deletions test/ngMock/angular-mocksSpec.js
Original file line number Diff line number Diff line change
Expand Up @@ -520,6 +520,42 @@ describe('ngMock', function() {
});

describe('module', function() {

describe('object literal format', function() {
var mock = { log: 'module' };

beforeEach(function() {
module({
'service': mock,
'other': { some: 'replacement'}
},
'ngResource',
function ($provide) { $provide.value('example', 'win'); }
);
});

it('should inject the mocked module', function() {
inject(function(service) {
expect(service).toEqual(mock);
});
});

it('should support multiple key value pairs', function() {
inject(function(service, other) {
expect(other.some).toEqual('replacement');
expect(service).toEqual(mock);
});
});

it('should integrate with string and function', function() {
inject(function(service, $resource, example) {
expect(service).toEqual(mock);
expect($resource).toBeDefined();
expect(example).toEqual('win');
});
});
});

describe('in DSL', function() {
it('should load module', module(function() {
log += 'module';
Expand Down

0 comments on commit f737c97

Please sign in to comment.