Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用KeyboardEvent模拟按键进行测试_Javascript_Keyboard_Automated Tests_Dom Events - Fatal编程技术网

Javascript 使用KeyboardEvent模拟按键进行测试

Javascript 使用KeyboardEvent模拟按键进行测试,javascript,keyboard,automated-tests,dom-events,Javascript,Keyboard,Automated Tests,Dom Events,我想编写一个Javascript测试,模拟右箭头键上的按键。下面是我尝试创建keydown事件的步骤: var data = { key: 'ArrowRight' }; var ev = new KeyboardEvent('keydown', data); console.log(ev); 当我在开发人员控制台中检查输出时,我希望在其中一个事件字段中看到值39,但它似乎未初始化 KeyboardEvent {which: 0, keyCode: 0, charCode: 0, re

我想编写一个Javascript测试,模拟右箭头键上的按键。下面是我尝试创建
keydown
事件的步骤:

var data = {
   key: 'ArrowRight'
};
var ev = new KeyboardEvent('keydown', data);
console.log(ev);

当我在开发人员控制台中检查输出时,我希望在其中一个事件字段中看到值39,但它似乎未初始化

KeyboardEvent {which: 0, keyCode: 0, charCode: 0, repeat: false, metaKey: false…}
altKey: false
bubbles: false
cancelBubble: false
cancelable: false
charCode: 0
ctrlKey: false
currentTarget: null
defaultPrevented: false
detail: 0
eventPhase: 0
keyCode: 0
keyIdentifier: ""
keyLocation: 0
layerX: 0
layerY: 0
location: 0
metaKey: false
pageX: 0
pageY: 0
path: Array[0]
repeat: false
returnValue: true
shiftKey: false
srcElement: null
target: null
timeStamp: 1430931169397
type: "keydown"
view: null
which: 0
__proto__: KeyboardEvent
.
我试着按照这些文件:


以前有人这样做过吗?

我不会撒谎,这似乎很奇怪。听起来您需要将按键事件的所有功能封装到一个函数中,然后测试该函数

如果您已经这样做了,并且您需要测试您的函数是否正在查找某个键码或其他东西,那么您可以使用普通javascript对象并将其传递到您正在测试的函数中

e、 g

如果你的函数看起来像这样

function myFunc(evt) {
  if (evt.keyCode === 39) {
    doThis();
  } else {
    doThat();
  }
}
var keyboardEvent = {keyCode: 39};
myFunc(keyboardEvent);
// Make sure that doThis() was called and not doThat()
然后,为了测试您的函数,您只需要一个keyCode等于39的对象。您的函数不应该关心它是由KeyBoardEvent对象触发的,而KeyBoardEvent对象附带了一堆您不需要的其他东西

所以你的测试是这样的

function myFunc(evt) {
  if (evt.keyCode === 39) {
    doThis();
  } else {
    doThat();
  }
}
var keyboardEvent = {keyCode: 39};
myFunc(keyboardEvent);
// Make sure that doThis() was called and not doThat()

我想这会解决你的问题,让事情变得更简单。

我也遇到了同样的问题,我意识到它在Firefox中有效,但在Chrome中无效。Chrome似乎没有在KeyboardEvent中使用“key”属性。您必须使用“keyIdentifier”。要在两种浏览器中进行测试,可以执行以下操作:

var data = {
       key: 'ArrowRight',
       keyIdentifier:'ArrowRight'
    };
var ev = new KeyboardEvent('keydown', data);
console.log(ev); 

我的目标是测试web组件是否会收到由浏览器生成的真实键盘事件,而不仅仅是它是否能够正确处理它。不过,你的建议意味着我可以将其分为两个测试,如果再次遇到这种情况,记住这一点会很有用。你是使用chrome浏览器还是firefox浏览器来测试它的?已经有一段时间了,但可能是chrome。好吧。铬就是原因。我已经找到了同样适用于chrome的解决方案。你找到解决这个问题的方法了吗?我知道已经过去5个多月了。对不起,时间太长了。没问题。我想我有解决办法。我会把它贴出来,让其他人过上轻松的生活。谢谢你的回答。但是,我面临另一个问题
TS2345:类型为“{key:string;keyIdentifier:string;}”的参数不能分配给类型为“KeyboardEventInit”的参数
您知道如何解决它吗?谢谢