[英]Unit Testing Angular Attribute Directive
我在测试AngularJS(1.5)属性受限指令时遇到一些问题。 请参见下面的示例指令和后续的单元测试,其中的单元测试会产生损坏的单元测试。
指示
(function (angular) {
'use strict';
function SomethingCtrl($filter) {
return {
restrict: 'A',
require: 'ngModel',
link: function(scope, element, attrs, ngModelController) {
var exampleFilter = $filter('exampleFilter');
ngModelController.$parsers.push(function(value) {
ngModelController.$setViewValue(value);
ngModelController.$render();
return value;
});
}
};
}
SomethingCtrl.$inject = ['$filter'];
angular.module('something.formatter', [
'filters'
]).directive('somethingFormatter', SomethingCtrl);
}(window.angular));
指令单元测试
fdescribe('something.formatter spec', function () {
'use strict';
var scope,
element,
testValue,
compile,
ngModelCtrl;
beforeEach(function () {
module('something.formatter');
compile = function () {
inject([
'$compile',
'$rootScope',
function ($compile, $rootScope) {
scope = $rootScope.$new();
scope.testValue = testValue;
element = angular.element('<input something-formatter ng-model="testValue"');
$compile(element)(scope);
ngModelCtrl = element.controller('ngModel');
scope.$digest();
}
]);
};
});
describe('initialization', function () {
beforeEach(function () {
testValue = 'Yay!';
compile();
ngModelCtrl.$setViewValue('Nay?');
});
it('should be defined', function () {
expect(scope.testValue).toEqual('Nay?');
});
});
});
我尝试按照以下说明进行操作: http : //jsfiddle.net/mazan_robert/hdsjbm9n/
为了能够调用ngModelController上的方法,例如; $ setViewValue。
然而,Jasmine继续对我大喊大叫,并告诉我$ setViewValue不是构造函数,甚至没有在实际指令中命中console.logs。
TypeError: undefined is not an object (evaluating 'ngModelCtrl.$setViewValue')
思考?
非常感谢你的帮助!
如果关闭输入标签,它将起作用:
element = angular.element('<input something-formatter ng-model="testValue" />');
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.