我正在尝试使用angularjs实现'@ Users Feature',除了编写单元测试之外我几乎完成了该功能。我有一个Caret模块可以帮助我在textarea中获得插入位置。
我认为最重要的是获得插入位置,但我不知道如何在茉莉花中做到这一点。
Mydirective
.directive('atUser', function (Caret) {
return {
restrict: 'A',
link: function (scope, element) {
element.bind('focus click keydown', function () {
scope.caretPos = Caret.getPos(element);
});
scope.$watch(function () {
return scope.caretPos;
}, function (nowCaretPos) {
/* do something here */
})
}
}
})
HTML
<textarea ng-model="message" at-user></textarea>
茉莉
describe('test at user', function () {
/* some init code */
it('should get caret postion', function () {
textarea = element.find('textarea');
textarea.triggerHandler('focus');
except(textarea.scope().caretPos).toEqual(0);
/*
* then i want to simulate keydown event and type something
* and get the caret postion
* but i dont know how to do it
* /
})
})
还有一件事是我不想使用jquery。
任何人都可以帮助我吗?
非常感谢!
答案 0 :(得分:1)
我刚问了一个类似的问题,我需要在Jasmine测试中设置textarea
的插入位置,我得到了一个有效的答案(using selectionStart on programmatically-created inputs),所以这是一个潜在的解决方案您可以使用Jasmine实现:
describe('test at user', function () {
/* some init code */
it('should get caret postion', function () {
textarea = element.find('textarea');
textarea.triggerHandler('focus');
expect(textarea.scope().caretPos).toEqual(0);
/*
* then i want to simulate keydown event and type something
* and get the caret postion
* but i dont know how to do it
*/
document.body.appendChild(textarea[0]); // I discovered this to be the key to using the .selectionStart property successfully
textarea.val('some text');
textarea[0].selectionStart = 9; // you need to move the caret manually when doing things programmatically
textarea.triggerHandler('focus');
expect(textarea.scope().caretPos).toEqual(9);
})
})