angularjs 单元测试何时使用 $rootScope.$new()
angularjs unit test when to use $rootScope.$new()
我真的不明白什么时候应该在我的 angular 单元测试中使用 $rootScope = $rootScope.$new() 。这截断了您在许多单元测试示例中看到的内容。但在以下示例中不起作用:
angular.module("app.root", []).factory("rootFct", function ($rootScope) {
$rootScope.amount = 12;
return {
getAmount: function () {
return ($rootScope.amount + 1);
}
}
});
关联的单元测试不起作用:
describe('Amount Tests', function() {
var rootFct, $rootScope;
beforeEach(function() {
angular.mock.module("app.root");
angular.mock.inject(function (_rootFct_, _$rootScope_) {
$rootScope = _$rootScope_.$new();
rootFct = _rootFct_;
});
});
it('Set Amount in rootScope on 10', function() {
var result = rootFct.getAmount();
expect(result).toBe(13);
$rootScope.amount = 15;
result = rootFct.getAmount();
expect(result).toBe(16);
});
});
它仅在我更改
时有效
$rootScope = _$rootScope_.$new();
到
$rootScope = _$rootScope_;
所以我真的不明白什么时候使用 $new() 以及它有什么用?
我们知道 $rootScope 在 Angular 应用程序中是一个全局范围,它也适用于单元测试。 Angular 框架也会在单元测试时创建一个 $rootScope 对象。
由于您将服务注入到测试中,Angular DI 使用全局 $rootScope
并自动将其注入到服务中。
你做$rootScope = _$rootScope_.$new();
不会有任何不同。在这里你没有将依赖注入到服务中,就像控制器的情况一样,我们使用 $new
创建范围并使用 $controller
注入它
您需要有原始的 $rootScope
来断言您的服务行为。
$new() is mainly used when creating a new scope out of an existing
scope.
您的代码已经在服务中注入了 rootScope,因此不会有任何区别。
$new()可以在你想从父作用域中获取一些属性时使用with/without隔离。
它需要两个参数 isolate 和 parent。
如果需要与父范围隔离,则需要使用隔离(布尔值)。
Parent (object) 显式定义父作用域。
请注意,手动创建的新作用域也需要手动销毁。
关于它的更多信息 here
我真的不明白什么时候应该在我的 angular 单元测试中使用 $rootScope = $rootScope.$new() 。这截断了您在许多单元测试示例中看到的内容。但在以下示例中不起作用:
angular.module("app.root", []).factory("rootFct", function ($rootScope) {
$rootScope.amount = 12;
return {
getAmount: function () {
return ($rootScope.amount + 1);
}
}
});
关联的单元测试不起作用:
describe('Amount Tests', function() {
var rootFct, $rootScope;
beforeEach(function() {
angular.mock.module("app.root");
angular.mock.inject(function (_rootFct_, _$rootScope_) {
$rootScope = _$rootScope_.$new();
rootFct = _rootFct_;
});
});
it('Set Amount in rootScope on 10', function() {
var result = rootFct.getAmount();
expect(result).toBe(13);
$rootScope.amount = 15;
result = rootFct.getAmount();
expect(result).toBe(16);
});
});
它仅在我更改
时有效$rootScope = _$rootScope_.$new();
到
$rootScope = _$rootScope_;
所以我真的不明白什么时候使用 $new() 以及它有什么用?
我们知道 $rootScope 在 Angular 应用程序中是一个全局范围,它也适用于单元测试。 Angular 框架也会在单元测试时创建一个 $rootScope 对象。
由于您将服务注入到测试中,Angular DI 使用全局 $rootScope
并自动将其注入到服务中。
你做$rootScope = _$rootScope_.$new();
不会有任何不同。在这里你没有将依赖注入到服务中,就像控制器的情况一样,我们使用 $new
创建范围并使用 $controller
注入它
您需要有原始的 $rootScope
来断言您的服务行为。
$new() is mainly used when creating a new scope out of an existing scope.
您的代码已经在服务中注入了 rootScope,因此不会有任何区别。
$new()可以在你想从父作用域中获取一些属性时使用with/without隔离。
它需要两个参数 isolate 和 parent。 如果需要与父范围隔离,则需要使用隔离(布尔值)。 Parent (object) 显式定义父作用域。
请注意,手动创建的新作用域也需要手动销毁。
关于它的更多信息 here