繁体   English   中英

angularjs单元测试何时使用$ rootScope。$ new()

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM