我想对一个看起来像这样的指令进行单元测试:
'use strict';
angular.module('app')
.directive('phone', function () {
return {
require: 'ngModel',
scope: {
user:'=',
},
link: function(scope, element, attrs, ctrl) {
ctrl.$parsers.unshift(function(viewValue) {
scope.user.division = null;
return viewValue;
});
}
};
});
这是我的失败测试
'use strict';
describe('Directive: phone', function () {
// load the directive's module
beforeEach(module('app'));
var element,
scope;
beforeEach(inject(function ($compile, $rootScope) {
scope = $rootScope.$new();
element = angular.element('<form name="form"><input name="phone" ng-model="user.phone" phone></form>');
scope.user = {};
element = $compile(element)(scope);
element.scope().$digest();
}));
it('should work', function() {
scope.form.phone.$setViewValue('1');
});
});
但是当我尝试运行它时,我得到了:
TypeError: 'undefined' is not an object (evaluating 'scope.user.division=null')
答案 0 :(得分:1)
您的隔离范围意味着元素上应该有一个user
属性,该属性引用父$ scope上的user
实体。
在编译的HTML中,没有user
属性,因此您的isolate $ scope的user
属性未定义。
您的HTML应如下所示:
<input ... user="user" />