diff options
Diffstat (limited to 'src/angular-mocks.js')
| -rw-r--r-- | src/angular-mocks.js | 52 | 
1 files changed, 46 insertions, 6 deletions
| diff --git a/src/angular-mocks.js b/src/angular-mocks.js index f70731d3..d2dbb114 100644 --- a/src/angular-mocks.js +++ b/src/angular-mocks.js @@ -935,16 +935,56 @@ window.jstestdriver && (function(window) {   * @return a method   */  window.jasmine && (function(window) { -  window.inject = function () { + +  function getCurrentSpec() { +    return jasmine.getEnv().currentSpec; +  } + +  function isSpecRunning() { +    var spec = getCurrentSpec(); +    return spec && spec.queue.running; +  } + +  window.module = function() { +    var moduleFns = Array.prototype.slice.call(arguments, 0); +    var stack = Error('Declaration Location').stack; +    return isSpecRunning() ? workFn() : workFn; +    ///////////////////// +    function workFn() { +      var spec = getCurrentSpec(); +      if (spec.$injector) { +        throw Error('Injector already created, can not register a module!'); +      } else { +        var modules = spec.$modules || (spec.$modules = []); +        angular.forEach(moduleFns, function(module) { +          modules.push(module); +        }); +      } +    } +  }; +  window.inject = function() {      var blockFns = Array.prototype.slice.call(arguments, 0); -    return function() { -      var injector = this.$injector; +    var stack = Error('Declaration Location').stack; +    return isSpecRunning() ? workFn() : workFn; +    ///////////////////// +    function workFn() { +      var spec = getCurrentSpec(); +      var modules = spec.$modules || []; +      modules.unshift('ngMock'); +      modules.unshift('ng'); +      var injector = spec.$injector;        if (!injector) { -        injector = this.$injector = angular.injector('ng', 'ngMock'); +        injector = spec.$injector = angular.injector(modules);        } +      console.log('inject', modules)        for(var i = 0, ii = blockFns.length; i < ii; i++) { -        injector.invoke(this, blockFns[i]); +        try { +          injector.invoke(blockFns[i] || angular.noop, this); +        } catch (e) { +          if(e.stack) e.stack +=  '\n' + stack; +          throw e; +        }        } -    }; +    }    }  })(window); | 
