我已经编写了包含以下模式的测试,但我不明白。
describe("controllerName", function() {
"use strict";
beforeEach(function() {
module("moduleName");
inject(function(_serviceName_) {
serviceName = _serviceName_;
});
});
...
});
调用module
函数有什么作用?调用inject
函数有什么作用? inject
函数如何知道它应该注入服务的位置?
如果你能给出我能理解的解释,那会让我高兴。
答案 0 :(得分:2)
我们需要加载包含模块,以便我们可以测试它。 module
是angular-mocks.js
提供的功能。因此,使用模块名称作为参数调用它会加载该模块。
inject
是由angular-mocks.js
提供给我们的另一种方法。它使我们可以访问我们文件中声明的各种依赖项。以您发布的代码为例,使用回调函数调用inject函数可以访问控制器/服务等依赖的依赖项。只有在回调中,您才能将这些依赖项分配给某些变量,然后在测试中使用它们。
由于需要对每个测试(即it
块)执行此操作,因此对module
和inject
函数的调用将放置在beforeEach
块中,因为它被调用在每个it
块之前。
此外,由于您调用了inject
函数,因此它允许您访问您在测试中某处使用的serviceName
依赖项。我们通常会提供一个包含_
的服务名称。这只是为了将它们与您在这些服务的测试中使用的变量区分开来。 $injector
在解析这些名称的同时删除了前导_
。
希望这可以帮助您更好地理解您编写的测试。
您可以阅读更多相关信息here