【发布时间】:2017-06-26 23:52:01
【问题描述】:
我在测试 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')
想法?
非常感谢您的帮助!
【问题讨论】:
标签: javascript angularjs unit-testing angularjs-directive jasmine