使用Jasmine测试Angular。 module()和inject()做了什么以及它们是如何连接的?

时间:2016-06-27 08:41:37

标签: angularjs jasmine

我已经编写了包含以下模式的测试,但我不明白。

describe("controllerName", function() {
    "use strict";

    beforeEach(function() {
        module("moduleName");

        inject(function(_serviceName_) {
            serviceName = _serviceName_;
        });
    });

    ...

});

调用module函数有什么作用?调用inject函数有什么作用? inject函数如何知道它应该注入服务的位置?

如果你能给出我能理解的解释,那会让我高兴。

1 个答案:

答案 0 :(得分:2)

我们需要加载包含模块,以便我们可以测试它。 moduleangular-mocks.js提供的功能。因此,使用模块名称作为参数调用它会加载该模块。

inject是由angular-mocks.js提供给我们的另一种方法。它使我们可以访问我们文件中声明的各种依赖项。以您发布的代码为例,使用回调函数调用inject函数可以访问控制器/服务等依赖的依赖项。只有在回调中,您才能将这些依赖项分配给某些变量,然后在测试中使用它们。

由于需要对每个测试(即it块)执行此操作,因此对moduleinject函数的调用将放置在beforeEach块中,因为它被调用在每个it块之前。

此外,由于您调用了inject函数,因此它允许您访问您在测试中某处使用的serviceName依赖项。我们通常会提供一个包含_的服务名称。这只是为了将它们与您在这些服务的测试中使用的变量区分开来。 $injector在解析这些名称的同时删除了前导_

希望这可以帮助您更好地理解您编写的测试。

您可以阅读更多相关信息here