0
我的指令看起來像這樣(去除輸入非數字):angularjs測試指令修改用戶輸入
'use strict';
angular.module('fooApp')
.directive('percent', function() {
return {
require: 'ngModel',
link: function (scope, element, attr, ngModelCtrl) {
function fromUser(text) {
// get rid of non-number data
var transformedInput = text.replace(/[^0-9]/g, '');
if(transformedInput !== text) {
ngModelCtrl.$setViewValue(transformedInput);
ngModelCtrl.$render();
}
return transformedInput;
}
ngModelCtrl.$parsers.push(fromUser);
}
};
}
我的測試是這樣的:
'use strict';
describe('Directive: percent', function() {
var $compile;
var $rootScope;
beforeEach(module('fooApp'));
beforeEach(inject(function(_$compile_, _$rootScope_){
$rootScope = _$rootScope_;
$compile = _$compile_;
}));
it('Removes non-digits', function() {
$compile('<input percent ng-model="someModel.Property" value="1a2b3"></input>')($rootScope);
$rootScope.$digest();
console.log($rootScope.someModel);
expect($rootScope.someModel.Property).toEqual('123');
});
});
不過,我可以在日誌中看到:
LOG: undefined
所以它聽起來像someModel
未設置=>測試失敗。
不知道我的指令有什麼問題。如果我手動測試:在HTML頁面輸入非數字,這些不會顯示(被忽略)。
什麼是正確的方法來測試?
我懷疑,一旦數據不是來自用戶,而是通過值來設置,我的指令不會修改內容。不知道如何改變這一點。