模拟Enter键按下Karma / Jasmine测试中的输入

时间:2016-08-11 01:13:07

标签: javascript jquery angularjs d3.js karma-jasmine

我正在尝试在角度自定义组件中测试用户搜索功能。我正在尝试添加文本并触发搜索的指令模板中的输入(仅输入)是:

 <input type="text" ng-model="searchInput" class="form-control search"/>

我想在上面的输入中添加“User”的文本值。测试以确保它具有该值,然后按下回车键,然后选择第一个匹配的节点。

  1. 获取输入元素
  2. 在输入中添加文字
  3. 测试以确保输入值正确
  4. 按输入
  5. 上的Enter键
  6. 确保搜索中第一个匹配项正确的文字
  7. 尝试过:

       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);
    
    
        }
    

    由于

2 个答案:

答案 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事件,你必须相应地触发它。

对不起,这有点模糊,但是如果不知道输入框附带的事件监听器就很难说。

希望这有帮助!