Angularjs 单元测试中的访问范围变量
我正在尝试访问单元测试中的scope.loading变量。其目的是测试侦听器上的$on是否正确启动 在我的指令的链接函数中,scope.load默认为false。当$on函数从$rootScope接收到'loadingPosts'$broadcast时,它应该更新为true 但是,测试用例总是失败,说明scope.load未定义。我哪里做错了 下面是我的测试用例: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
'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 );