[英]Jasmine + AngularJS: How to test $rootScope.$broadcast being called with arguments?
[英]angularjs unit test when to use $rootScope.$new()
我不太了解何时在我的角度单元测试中使用$ 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()以及它有什么用?
$ new()主要在现有范围之外创建新范围时使用。
您的代码已将rootScope注入服务中,因此不会有任何区别。
当您想通过/不通过隔离从父作用域中获取某些属性时,可以使用$ new()。
它需要两个参数isolate和parent。 如果需要与父作用域隔离,则需要使用隔离(布尔值)。 父级(对象)明确定义父级范围。
请注意,手动创建的新作用域也需要手动销毁。
在这里更多
众所周知,$ rootScope是Angular应用程序中的全局范围,对于单元测试也是如此。 Angular框架也会在单元测试时创建一个$ rootScope对象。
由于您将服务注入测试中,因此Angular DI使用全局$rootScope
并将其自动注入服务中。
您正在执行$rootScope = _$rootScope_.$new();
不会有任何不同。 在这里,您并没有像在控制器中那样将依赖项注入到服务中,在这种情况下,我们使用$new
创建作用域,并使用$controller
注入作用域。您需要具有原始的$rootScope
来声明服务行为。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.