Karma中的单元测试:文本输入中的Keypress

Jee*_*ves 7 javascript unit-testing keypress keydown karma-runner

有一个简单的HTML文本输入:

<html>
<body>
    <input id="inputstring" type="text"  onkeypress="testcharacter" onKeyUp="testcharacter ">
    <div id ="result"></div>
    <script type="text/javascript" src="javascriptfile.js"></script>
    <script>testcharacter .init();</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

希望能够在此文本输入中发生的每个按键上运行unittest并针对特定键进行检查.Javascript文件是:

'use strict';

window.testcharacter = window.testcharacter || {};
    (function() {
    var testcharacter = function(k){
        var s = document.getElementById('inputstring').value
        if(s!=null||s.trim()!=""){
            if(k==65){
               document.getElementById('result').innerHTML = 'You pressed A'
            }
            if(s.length==0)
            { document.getElementById('result').innerHTML = ''}
        }
    }
window.testcharacter.init = function(){
    document.getElementById('inputstring').addEventListener('keyup', testcharacter );
    document.getElementById('inputstring').addEventListener('keypress', testcharacter );
};
  })();
Run Code Online (Sandbox Code Playgroud)

我的测试文件的一部分,关于我得到的这部分:

     it('should display character count with each keypress', function(){

            var triggerKeyDown = function(element,keycode){

                var e = jQuery.Event("testcharacter");
                e.which = keycode;
                $(element).trigger(e)
                var ee = jQuery.Event("keyup")
                ee.which = keycode + 1;
                $(element).trigger(ee)

                r = document.getElementById('inputstring').value

expect(document.getElementById('result').innerHTML).toBe(expected);
expect(document.getElementById('inputstring').innerHTML).toBe(expected);
            };
            triggerKeyDown('inputstring','65')

        });
Run Code Online (Sandbox Code Playgroud)

现在,按键和键盘似乎没有持续到输入框,(我可以轻松设置值: document.getElementById('inputstring').value = 'A'它通过测试的其他部分,但不是按键)虽然我可以看到事件正在触发:

价值测试:

ALERT: <input id="inputstring" type="text">   // captured 'inputstring'
ALERT: ''   // captured value of 'inputstring'.value and 'result'.innerHTML
ALERT: 65    // e.which value
ALERT: {type: 'keypress', timeStamp: 1474058737895, jQuery31006431827041498093: true, which: 65}   // event created
Run Code Online (Sandbox Code Playgroud)

不知道如何:(1)触发Jasmine中的keypress/keyup事件(2)将这些事件应用于特定的html元素.值因此我可以测试这些值.我想要测试每个按键/键盘.

Mih*_*icu 0

我认为你应该使用Jquery Simulate模块

jQuery.simulate() - 模拟事件以帮助对用户交互进行单元测试。