【问题标题】:How to automatically load a module in AngularJS without specifying it as a dependancy如何在 AngularJS 中自动加载模块而不将其指定为依赖项
【发布时间】:2014-01-22 09:09:50
【问题描述】:

如果您在 index.html 中包含 angular-mocks.js,ngMock 会自动包含自身。

什么是强制 Angular 在测试模式下加载模块的最简单方法,只需包含一个文件而无需编辑任何模块依赖项。

【问题讨论】:

  • 你做不到。无法自动加载模块,因为您必须指定依赖关系树。 Angular-mocks 仅依赖于 ng 模块。
  • 恐怕这不是真的,angular-mocks.js 使用 ngMock 通过将 ngMock 和 ng 模块转移到模块数组中来实现这一点。他们的实现对我来说看起来不是很干净(该过程有很多支持代码),我想知道是否有更好的方法。
  • “自动包含自身”是什么意思? ngMocks 使用angular.module('ngMock', ['ng'])... 加载自身。

标签: angularjs angular-mock


【解决方案1】:

加载模块的唯一方法是调用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');
    ...

您可以创建自己的函数,在实例化之前将您的模块添加到依赖项列表中,但我几乎不相信这将有助于测试。相反,这将是另一种错误来源(并可能导致“隐藏”依赖错误)。

【讨论】:

  • 这是我感兴趣的第二部分 - 我想知道是否有一种优雅的方式来做到这一点?
  • 你到底想达到什么目的?为什么你想让你的测试变得不那么可靠和容易出错只是为了节省一些按键?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-06
  • 2018-05-26
  • 2020-12-08
  • 1970-01-01
  • 2011-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多