diff --git a/src/ngMock/angular-mocks.js b/src/ngMock/angular-mocks.js index 38456a4c903b..25f276e2acd4 100644 --- a/src/ngMock/angular-mocks.js +++ b/src/ngMock/angular-mocks.js @@ -2282,16 +2282,21 @@ if (window.jasmine || window.mocha) { if (currentSpec.$injector) { throw new Error('Injector already created, can not register a module!'); } else { - var modules = currentSpec.$modules || (currentSpec.$modules = []); + var fn, modules = currentSpec.$modules || (currentSpec.$modules = []); angular.forEach(moduleFns, function(module) { if (angular.isObject(module) && !angular.isArray(module)) { - modules.push(function($provide) { + fn = function($provide) { angular.forEach(module, function(value, key) { $provide.value(key, value); }); - }); + }; } else { - modules.push(module); + fn = module; + } + if (currentSpec.$providerInjector) { + currentSpec.$providerInjector.invoke(fn); + } else { + modules.push(fn); } }); } @@ -2405,6 +2410,9 @@ if (window.jasmine || window.mocha) { function workFn() { var modules = currentSpec.$modules || []; var strictDi = !!currentSpec.$injectorStrict; + modules.unshift(function($injector) { + currentSpec.$providerInjector = $injector; + }); modules.unshift('ngMock'); modules.unshift('ng'); var injector = currentSpec.$injector; diff --git a/test/ngMock/angular-mocksSpec.js b/test/ngMock/angular-mocksSpec.js index 11836c13723c..293136bf818c 100644 --- a/test/ngMock/angular-mocksSpec.js +++ b/test/ngMock/angular-mocksSpec.js @@ -831,6 +831,19 @@ describe('ngMock', function() { }); }); + describe('nested calls', function() { + it('should invoke nested module calls immediately', function() { + module(function($provide) { + $provide.constant('someConst', 'blah'); + module(function(someConst) { + log = someConst; + }); + }); + inject(function() { + expect(log).toBe('blah'); + }); + }); + }); describe('inline in test', function() { it('should load module', function() {