我正在阅读angularjs phonecat教程。我目前正在使用step 5。
在"测试"部分中,我发现了这段代码:
describe('PhoneCat controllers', function() {
describe('PhoneListCtrl', function(){
var scope, ctrl, $httpBackend;
// Load our app module definition before each test.
beforeEach(module('phonecatApp'));
// The injector ignores leading and trailing underscores here (i.e. _$httpBackend_).
// This allows us to inject a service but then attach it to a variable
// with the same name as the service in order to avoid a name conflict.
beforeEach(inject(function(_$httpBackend_, $rootScope, $controller) {
$httpBackend = _$httpBackend_;
$httpBackend.expectGET('phones/phones.json').
respond([{name: 'Nexus S'}, {name: 'Motorola DROID'}]);
scope = $rootScope.$new();
ctrl = $controller('PhoneListCtrl', {$scope: scope});
}));
我无法理解创建 $ httpBackend var的原因。你能解释一下吗?
提前致谢。
答案 0 :(得分:1)
$httpBackend
测试定义中访问 it
。因此,它必须在it
调用的父关闭中,您将在下面写下来。
beforeEach
是您执行适用于所有it
次调用的内容的地方,因此初始化$httpBackend
是一个明智的地方。
关于上面的评论,如果inject
的参数命名为$httpBackend
,那么在该匿名函数中,您将无法访问" global"一个(关于JavaScript中的闭包如何工作),所以你将无法初始化它。
因此,写inject
的人添加了这个"魔法"有关前导和尾部下划线的功能,因此您可以将其命名为与内部初始化所需的全局变量不同。