diff options
| author | Merrick Christensen | 2013-08-25 23:45:58 -0600 | 
|---|---|---|
| committer | Vojta Jina | 2013-09-03 14:22:12 -0700 | 
| commit | f737c97df02918eb5b19bf5c8248fa3e20f9b361 (patch) | |
| tree | 40de4c1b0fb4ef95eea9b7c02b1fac2f6163f2ee | |
| parent | 8e48c4ff6abf7083a04cf20312d2b106f4ba5b2c (diff) | |
| download | angular.js-f737c97df02918eb5b19bf5c8248fa3e20f9b361.tar.bz2 | |
feat(ngMock): allow passing an object literal as shorthand to module
| -rw-r--r-- | src/ngMock/angular-mocks.js | 16 | ||||
| -rw-r--r-- | test/ngMock/angular-mocksSpec.js | 36 | 
2 files changed, 49 insertions, 3 deletions
| diff --git a/src/ngMock/angular-mocks.js b/src/ngMock/angular-mocks.js index 5e5041cb..6764bf17 100644 --- a/src/ngMock/angular-mocks.js +++ b/src/ngMock/angular-mocks.js @@ -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); @@ -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); +          }          });        }      } diff --git a/test/ngMock/angular-mocksSpec.js b/test/ngMock/angular-mocksSpec.js index 13e08a68..966877b8 100644 --- a/test/ngMock/angular-mocksSpec.js +++ b/test/ngMock/angular-mocksSpec.js @@ -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'; | 
