测试中的依赖注入对我来说很困惑。 特别是在官方教程的chapter 5中,我可以看到$ httpBackend配置为提供虚假响应:
$httpBackend = _$httpBackend_;
$httpBackend.expectGET('phones/phones.json').
respond([{name: 'Nexus S'}, {name: 'Motorola DROID'}]);
但我无法看到的是控制器想要使用这个新定义的依赖项而不是$http
定义中引入的原始PhoneListCtrl
。
在相同的代码片段中,如果控制器是使用以下内容初始化的:
scope = $rootScope.$new();
ctrl = $controller('PhoneListCtrl', {
$scope: scope,
$http: $httpBackend});
我可以理解我们正在覆盖依赖关系,因此当控制器想要访问$http
时,它将使用我们的模拟。
但鉴于上述教程中并非如此:
scope = $rootScope.$new();
ctrl = $controller('PhoneListCtrl', {$scope: scope});
并且只有范围传递给$controller
,我无法看到任何可以将$httpBackend
链接到控制器的内容。
我很困惑控制器如何知道新的模拟服务/依赖。
由于
答案 0 :(得分:1)
$http
未被$httpBackend
取代。 $http
在内部使用$httpBackend
。如果没有ngMock
模块,则使用service documented here。然后,当包含ngMock
模块时,它使用service documented here。因此,对于ngMock
模块,它只是为$httpBackend
服务提供了不同的定义。