这是我提出的另一个问题的延续,该问题已成功回答。
我正在学习如何使用 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 = {}