2014-01-22 43 views
1

如果在index.html中包含angular-mocks.js,ngMock会自动包含自身。如何在AngularJS中自动加载模块而不指定它作为依赖

什么是最简单的方法来强制角度加载模块在测试模式,只需包括一个文件,而不必编辑任何模块的依赖关系。

+0

你不能这样做。没有办法自动化模块加载,因为您必须指定依赖关系树。 Angular-mocks只依赖于'ng'模块。 –

+0

恐怕不是这样,angular-mocks.js通过将ngMock和ng模块移入模块数组来实现ngMock。虽然他们的实现对我来说看起来不是很干净(这个过程有很多支持代码),但我想知道是否有更好的方法。 – eddiec

+0

“自动包含自身”是什么意思? ** [ngMocks](http://code.angularjs.org/1.2.9/angular-mocks.js)**使用'angular.module('ngMock',['ng'])...'加载本身。 – gkalpak

回答

2

加载模块的唯一方法是调用angular.module(...)ngMocks负荷“本身”致电:

angular.module('ngMock', ['ng']).provider(...).config(...); 

你并不需要声明一个模块作为一个依赖加载它。你可以在其脚本中包含angular.module('<moduleName>', [<moduleDependencies>...]);


如果你的意思是“如何ngMock自动的加入到加载使用window.moduleangular.mock.module任何模块的依赖关系列表,这是因为ngMocks创建一个自定义的注入,这样,它需要依赖的名单,并预置'ngMock'

window.inject = angular.mock.inject = function() { 
    ... 
    return isSpecRunning() ? workFn() : workFn; 
    ... 
    function workFn() { 
    var modules = currentSpec.$modules || []; 

    modules.unshift('ngMock'); // <-- this line does the trick 
    modules.unshift('ng'); 
    ... 

你可以创建自己的函数,预先考虑您的模块中实例化之前依赖的名单,但我很难相信THI s将有助于测试。相反,它将是错误的另一个来源(并且将导致可能“隐藏”依赖性错误)。

+0

这是我感兴趣的第二部分 - 我想知道是否有一种优雅的方式来做到这一点? – eddiec

+0

你究竟想达到什么目的?为什么你想让你的测试易于理解并容易出错?只需保存一些按键就可以了? – gkalpak