Jest.js cypress无法触发由document.addEventListener on keypress添加的函数

33qvvth1  于 2023-08-01  发布在  Jest
关注(0)|答案(2)|浏览(105)

我有一个react应用程序,其中我动态地在文档上添加了一个事件侦听器,它在按下右/左箭头键时执行。
当我尝试在cypress open-ct中通过按箭头键手动触发它时,它可以工作,但是当我在测试中编写它来触发它时,如cy.get('body').trigger('keydown', { keyCode: 39 });,函数不会触发,是否有其他方法可以触发document.addEventListener添加的函数?

componentDidUpdate(prevProps) {

      if (something something) {
        document.addEventListener('keydown', this.handleLeftRightKeys);
      } else {
        document.removeEventListener('keydown', this.handleLeftRightKeys);
      }
}

handleLeftRightKeys(event) {
    if (event.key === 'ArrowLeft') {
      this.prev();
    } else if (event.key === 'ArrowRight') {
      this.next();
    }
}

字符串
我希望这些prev()和next()函数能够从Cypress测试文件中触发。怎么办?

yebdmbv4

yebdmbv41#

您在body元素上触发,但事件侦听器在document上。也许会有泡沫,但如果没有,也值得一试

cy.document()
  .trigger('keydown', { keyCode: 39 })

字符串

5vf7fwbs

5vf7fwbs2#

找到答案了。必须将keyCode添加到eventListener。
变更

handleLeftRightKeys(event) {
    if (event.key === 'ArrowLeft') {
      this.prev();
    } else if (event.key === 'ArrowRight') {
      this.next();
    }
}

字符串

handleLeftRightKeys(event) {
    if (event.key === 'ArrowLeft' || event.keyCode === 37) {
      this.prev();
    } else if (event.key === 'ArrowRight' || event.keyCode === 39) {
      this.next();
    }
}

相关问题