AngularJs单元测试隔离范围指令
我想测试以下指令“spinInput”,它需要ngModel,但我无法访问该指令的范围。我得到的只是一个空范围。使用Angularjs 1.3.13 指令:AngularJs单元测试隔离范围指令,angularjs,unit-testing,angularjs-scope,jasmine,Angularjs,Unit Testing,Angularjs Scope,Jasmine,我想测试以下指令“spinInput”,它需要ngModel,但我无法访问该指令的范围。我得到的只是一个空范围。使用Angularjs 1.3.13 指令: angular.module('charts.spinInput',[]).directive('spinInput', function() { return { restrict: 'E', replace: true, require:'ngModel', scope: { min:"@"
angular.module('charts.spinInput',[]).directive('spinInput', function() {
return {
restrict: 'E',
replace: true,
require:'ngModel',
scope: {
min:"@"
},
controller:function($scope)
{
$scope.test=12;
$scope.calcAngle=function(point)
{
var xDif=point.x-50;
var yDif=point.y-50;
return (Math.atan2(yDif, xDif) * 180 / Math.PI);
};
},
templateUrl: 'charts/directive/spinInput/spinInput.html',
link:function(scope, element, attr,ngModel) {
...
}
};
});
单元测试:
引发以下错误:TypeError:“undefined”不是对象(正在计算“innerScope.min”)
description('spinInput',function()){
每个模块之前(模块(“图表”);
var$httpBackend;
var元素;
var外窥镜;
var内窥镜;
beforeach(注入(函数($rootScope、$compile、$injector){
元素=角度。元素(“”);
$httpBackend=$injector.get(“$httpBackend”);
$httpBackend.whenGET('charts/directive/spinInput/spinInput.html')。响应(200,);
outerScope=$rootScope.$new();
$compile(元素)(外部范围);
innerScope=element.isolateScope();
外层镜。$digest();
}));
它('应定义scope.min',函数(){
expect(innerScope.min).toBeDefined();
});
});
尝试将外部范围。$digest()放在元素之前。isolateScope()尝试将外部范围。$digest()放在元素之前。isolateScope()您构建测试的方式似乎导致了问题
我已经能够成功地测试隔离范围,如下所示
您可以查看在此平台上运行的测试(模板代码已注释掉)
descripe('指令:spinInput',函数(){
变量范围、编译、validHTML、templateHtml;;
validHTML=“”;
在每个模块之前(模块(‘myApp’);
beforeach(注入函数($compile、$rootScope、$templateCache){
templateHtml=$templateCache.get('charts/directive/spinInput/spinInput.html');
如果(!templateHtml){
templateHtml=$.ajax('charts/directive/spinpoint/spinpoint.html',{async:false}).responseText;
$templateCache.put('charts/directive/spinInput/spinInput.html',templateHtml)
}
scope=$rootScope.$new();
compile=$compile;
}));
函数create(){
var elem,compiledElem;
elem=角度元素(validHTML);
compiledElem=编译(elem)(范围);
范围。$digest();
返回compiledlem;
}
它('应定义scope.min',函数(){
var el=create();
期望(el.isolateScope().min).toBeDefined();
});
它('scope.min应等于12',函数(){
var el=create();
expect(el.isolateScope().min).toEqual('12');
});
});
您构建测试的方式似乎引起了一些问题
我已经能够成功地测试隔离范围,如下所示
您可以查看在此平台上运行的测试(模板代码已注释掉)
descripe('指令:spinInput',函数(){
变量范围、编译、validHTML、templateHtml;;
validHTML=“”;
在每个模块之前(模块(‘myApp’);
beforeach(注入函数($compile、$rootScope、$templateCache){
templateHtml=$templateCache.get('charts/directive/spinInput/spinInput.html');
如果(!templateHtml){
templateHtml=$.ajax('charts/directive/spinpoint/spinpoint.html',{async:false}).responseText;
$templateCache.put('charts/directive/spinInput/spinInput.html',templateHtml)
}
scope=$rootScope.$new();
compile=$compile;
}));
函数create(){
var elem,compiledElem;
elem=角度元素(validHTML);
compiledElem=编译(elem)(范围);
范围。$digest();
返回compiledlem;
}
它('应定义scope.min',函数(){
var el=create();
期望(el.isolateScope().min).toBeDefined();
});
它('scope.min应等于12',函数(){
var el=create();
expect(el.isolateScope().min).toEqual('12');
});
});
问题出在ng模型指令上问题出在ng模型指令上
describe('spinInput', function() {
beforeEach(module('charts'));
var $httpBackend;
var element;
var outerScope;
var innerScope;
beforeEach(inject(function($rootScope, $compile , $injector) {
element = angular.element('<spin-input min="12"></spin-input>');
$httpBackend = $injector.get('$httpBackend');
$httpBackend.whenGET('charts/directive/spinInput/spinInput.html').respond(200, '');
outerScope = $rootScope.$new();
$compile(element)(outerScope);
innerScope = element.isolateScope();
outerScope.$digest();
}));
it('scope.min should be defined', function() {
expect(innerScope.min).toBeDefined();
});
});
describe('Directive: spinInput', function() {
var scope, compile, validHTML, templateHtml;;
validHTML = '<spin-input min="12"></spin-input>';
beforeEach(module('myApp'));
beforeEach(inject(function($compile, $rootScope, $templateCache){
templateHtml = $templateCache.get('charts/directive/spinInput/spinInput.html');
if(!templateHtml) {
templateHtml = $.ajax('charts/directive/spinInput/spinInput.html', {async: false}).responseText;
$templateCache.put('charts/directive/spinInput/spinInput.html', templateHtml)
}
scope = $rootScope.$new();
compile = $compile;
}));
function create() {
var elem, compiledElem;
elem = angular.element(validHTML);
compiledElem = compile(elem)(scope);
scope.$digest();
return compiledElem;
}
it('scope.min should be defined', function() {
var el = create();
expect(el.isolateScope().min).toBeDefined();
});
it('scope.min should equal 12', function() {
var el = create();
expect(el.isolateScope().min).toEqual('12');
});
});