我正在尝试在角度自定义组件中测试用户搜索功能。我正在尝试添加文本并触发搜索的指令模板中的输入(仅输入)是:
<input type="text" ng-model="searchInput" class="form-control search"/>
我想在上面的输入中添加“User”的文本值。测试以确保它具有该值,然后按下回车键,然后选择第一个匹配的节点。
尝试过:
it ("should search for the specified node", function () {
var value = "User is not registered"
var input = diagramDirective.find("input");
$(input).val(value).trigger("input");
scope.$apply();
//why can't I trigger a click event here by doing something like
var e = jQuery.Event("keypress");
e.keyCode = 13;
$(input).trigger(e);
}
由于
答案 0 :(得分:3)
您需要将JQuery.Event与触发控制器中最终搜索的内容相匹配,因此如果您的控制器正在侦听按键,那么您需要确保您的jQuery.Event是&#34; keypress&# 34;事件,但如果您的控制器正在监听&#34; keyup&#34;你需要将你的jQuery事件设置为&#34; keyup&#34;。您还需要在实际事件的回调中查找匹配项
it("should search for the specified nodes", function () {
var value = "User is not registered";
var e = jQuery.Event("keypress");
e.keyCode = 13;
// find the input
var directiveElementInput = diagramDirective.find("input");
// Set some text!
$(directiveElementInput).val(value).trigger("input");
// make sure the input has the value
expect(directiveElementInput).toHaveValue(value);
// execute the event on the input and check for the selected item
$(directiveElementInput).keypress(function () {
// do your check here for the matching item here
}).trigger(e);
});
答案 1 :(得分:0)
我建议您查看输入框中的事件侦听器,因为输入框不一定总是由“enter”按键触发。它可能正在听的其他一些可能的事件是“模糊”,“键盘”,“改变”。根据它是一个事件监听器还是一个on-whatever事件,你必须相应地触发它。
对不起,这有点模糊,但是如果不知道输入框附带的事件监听器就很难说。
希望这有帮助!