这是我提出的另一个问题的延续,该问题已成功回答。
我正在学习如何使用 Karma、Jasmine 和 ngMock 对 AngularJS 应用程序进行单元测试。这是我有疑问的代码:
describe('myController function', function() {
describe('myController', function() {
var scope;
beforeEach(module('myApp'));
beforeEach(inject(function($rootScope, $controller) {
// These are the 2 lines I'm a bit confused about:
scope = $rootScope.$new();
$controller('MyController', {$scope: scope});
}));
it("...");
});
});
问题1:为什么我们要新建一个scope
并包含在locals注入区这一行:$controller('MyController', {$scope: scope});
?它似乎工作得很好(例如,scope
现在代表$scope
来自该控制器的对象并具有它应该具有的所有属性和功能),但代码似乎暗示我们正在$scope
用我们新创建的(并且为空的)重置控制器) scope
(从行scope = $rootScope.$new();
)。所以我想我只是没有完全理解那些当地人的目的/内部运作。
问题 2:从我的搜索中我也看到 newscope
以两种常见的方式创建,或者上面显示的方式$rootScope.$new()
,或者简单地声明scope = {}
。甚至 Angular 文档都以两种方式进行,如此处(使用) 和此处(使用 ) 所见。为什么这是一种方式而不是另一种方式?有区别吗?$rootScope.$new()
$scope = {}