Angularjs 单元测试中的访问范围变量

Angularjs 单元测试中的访问范围变量,angularjs,unit-testing,Angularjs,Unit Testing,我正在尝试访问单元测试中的scope.loading变量。其目的是测试侦听器上的$on是否正确启动 在我的指令的链接函数中,scope.load默认为false。当$on函数从$rootScope接收到'loadingPosts'$broadcast时,它应该更新为true 但是,测试用例总是失败,说明scope.load未定义。我哪里做错了 下面是我的测试用例: 'use strict'; describe('ngPress', function() { beforeEach(mod

我正在尝试访问单元测试中的scope.loading变量。其目的是测试侦听器上的$on是否正确启动

在我的指令的链接函数中,scope.load默认为false。当$on函数从$rootScope接收到'loadingPosts'$broadcast时,它应该更新为true

但是,测试用例总是失败,说明scope.load未定义。我哪里做错了

下面是我的测试用例:

'use strict';

describe('ngPress', function()
{
    beforeEach(module('ngPress'));

    describe('ngpLoader directive', function()
    {
        it('loading event fires', function()
        {
            inject(function($compile, $rootScope)
            {
                var scope = $rootScope.$new();

                var element = $compile('<ngp-loader type=\"posts\"></ngp-loader>')(scope);

                $rootScope.$broadcast( 'loadingPosts' );

                expect( scope.loading ).toEqual( true );
            });
        });
    });
});
“严格使用”;
描述('ngPress',函数()
{
每个模块(模块('ngPress'))之前;
描述('ngpLoader指令',函数()
{
它('加载事件激发',函数()
{
注入(函数($compile,$rootScope)
{
var scope=$rootScope.$new();
变量元素=$compile(“”)(范围);
$rootScope.$broadcast('loadingPosts');
expect(scope.loading)。toEqual(true);
});
});
});
});
这是指令:

(function ()
{
    angular.module('ngPress').directive('ngpLoader',
        [function ()
        {
            var link = function(scope, element, attrs)
            {
                scope.loading = false;

                scope.$on( 'loading'+scope.type.capitalizeFirstLetter(), function()
                {
                    scope.loading = true;
                });

                scope.$on( scope.type+'Loaded', function()
                {
                    scope.loading = false;
                });

                scope.$on( scope.type+'LoadFailed', function()
                {
                    scope.loading = false;
                });
            };

            return {
                link: link,
                restrict: 'E',
                replace: true,
                template: '<div class="loader" ng-show="loading"></div>',
                scope: {
                    type: '@'
                }
            };
        }]);
}());
(函数()
{
角度。模块('ngPress')。指令('ngpLoader',
[功能()
{
变量链接=函数(范围、元素、属性)
{
scope.loading=false;
scope.on('loading'+scope.type.capitalizeFirstLetter(),function())
{
scope.loading=true;
});
scope.on(scope.type+'Loaded',function()
{
scope.loading=false;
});
scope.on(scope.type+'LoadFailed',function()
{
scope.loading=false;
});
};
返回{
链接:链接,
限制:'E',
替换:正确,
模板:“”,
范围:{
类型:“@”
}
};
}]);
}());
您的指令使用作用域选项,即
作用域:{type:'@}

您可以使用
元素在测试中访问此范围。isolateScope()

var-scope=$rootScope.$new();
变量元素=$compile(“”)(范围);
$rootScope.$broadcast('loadingPosts');
var isolateScope=element.isolateScope();
isolateScope.$apply();
expect(isolateScope.loading).toEqual(true);
:

isolateScope()-检索已附加的隔离作用域 直接指向当前元素

var scope = $rootScope.$new();

var element = $compile('<ngp-loader type=\"posts\"></ngp-loader>')(scope);

$rootScope.$broadcast( 'loadingPosts' );

var isolateScope = element.isolateScope();
isolateScope.$apply();
expect( isolateScope.loading ).toEqual( true );