【问题标题】:How does the angular.mock.module function know what module to address when mocking dependencies?angular.mock.module 函数如何知道在模拟依赖项时要处理哪个模块?
【发布时间】:2015-03-24 10:30:06
【问题描述】:

我试图弄清楚函数angular.mock.module(通常别名为window.module)是如何工作的。我了解它的主要用途是在您的测试中加载模块;这很简单:

beforeEach(angular.mock.module("mymodule"));

这将在我的茉莉花规格中的每个 it 之前加载 myhmodule

module 的另一种用法是在某个模块内模拟服务/工厂/值。假设 mymodule 有一个名为 foo 的值 42 在我的规范中,我可以这样:

beforeEach(angular.mock.module("mymodule")); // this loads the module

// whereas this mocks the value of foo
beforeEach(module(function($provide) {
   $provide.value("foo", 43);
});

我现在的问题是:module 如何知道在使用$provide 服务进行模拟时要处理哪个模块?事实上,在我的测试中,我可以这样写:

beforeEach(angular.mock.module("mymodule"));
beforeEach(angular.mock.module("anothermodule"));

beforeEach(module(function($provide) {
   $provide.value("foo", 43);
});

最后一个 sn-p 是否会提供 foo=43mymoduleanothermodule

【问题讨论】:

    标签: angularjs unit-testing mocking


    【解决方案1】:
    module(function($provide) {
      $provide.value("foo", 43);
    }
    

    这会注册一个提供foo 值的新模块。它不会将值添加到任何现有模块。

    【讨论】:

    • 那么为什么它被用来模拟在现有模块中注册的现有服务呢?但最重要的是,它到底是如何工作的?
    • 为什么这个新模块能够覆盖预先存在的服务?很简单,因为它是后来定义的?
    • 你最后一个问题的答案是肯定的。
    猜你喜欢
    • 1970-01-01
    • 2016-02-07
    • 2019-01-29
    • 2019-09-17
    • 1970-01-01
    • 2010-11-15
    • 1970-01-01
    • 2021-01-23
    • 2020-01-11
    相关资源
    最近更新 更多