【发布时间】:2015-03-20 10:32:10
【问题描述】:
测试中的依赖注入让我感到困惑。 具体在官方教程的chapter 5,可以看到$httpBackend被配置为提供假响应:
$httpBackend = _$httpBackend_;
$httpBackend.expectGET('phones/phones.json').
respond([{name: 'Nexus S'}, {name: 'Motorola DROID'}]);
但我看不到的是,为什么控制器要使用这个新定义的依赖项,而不是 PhoneListCtrl 定义中引入的原始 $http。
在相同的代码 sn-p 中,如果控制器是这样初始化的:
scope = $rootScope.$new();
ctrl = $controller('PhoneListCtrl', {
$scope: scope,
$http: $httpBackend});
我可以理解我们正在覆盖依赖项,因此当控制器想要访问 $http 时,它将使用我们模拟的那个。
但鉴于上述教程中并非如此:
scope = $rootScope.$new();
ctrl = $controller('PhoneListCtrl', {$scope: scope});
只有作用域被传递给$controller,我看不到任何将$httpBackend链接到控制器的东西。
我只是对控制器如何知道新的模拟服务/依赖关系感到困惑。
谢谢
【问题讨论】:
标签: angularjs unit-testing controller jasmine