javascript - 似乎无法用 Jest 模拟点击事件

标签 javascript reactjs jestjs enzyme

我刚开始使用 Jest 进行测试,需要模拟单击事件。我已经能够使用 enzyme CSS选择器选择元素并触发事件,但测试仍然失败,说我还没有运行该函数。

Test: 


it('test',() => {
  const e = { target: {id:'X'} }
  const click = jest.fn();

  let wrapper = shallow(<GameBoard onClick={click}/>);
  let test = wrapper.find("#gameBoard").childAt(0)
  test.simulate('click',e)
  expect(click).toHaveBeenCalledTimes(1)

})

Component :

import React, {Component} from 'react'


class GameBoard extends Component {

  handleClick = (e) => {
  this.props.turn

    if (e.target.innerText === ''){
        this.props.addToTotalMoves()
        e.target.innerText = this.props.turn

        this.props.updateActiveBoardArray(e.target.id)

        this.props.changeTurn()
      }
    }
  render(){
    return (

        <div id ='gameBoard'>
          <div
          id = '0'
          className = 'boardTile'
          onClick = {this.handleClick}
          ></div>

最佳答案

查看GameBoardhandleClick的源代码,我们可以看到它没有调用this.props.onClick()

相反,它调用

    this.props.updateActiveBoardArray(e.target.id)
    this.props.changeTurn()

因此,您必须在测试中传递这些 props 并检查它们是否被调用:

const e = { target: {id:'X'} }
const updateActiveBoardArray = jest.fn();
const changeTurn= jest.fn();

let wrapper = shallow(<GameBoard 
    updateActiveBoardArray={updateActiveBoardArray}
    changeTurn={changeTurn}
/>);
let test = wrapper.find("#gameBoard").childAt(0).simulate('click', e);
expect(updateActiveBoardArray).toHaveBeenCalledTimes(1);
expect(updateActiveBoardArray).toHaveBeenCalledWith('X');
expect(changeTurn).toHaveBeenCalledTimes(1);

关于javascript - 似乎无法用 Jest 模拟点击事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55996075/

相关文章:

javascript - 将 Controller 和指令的交互方式结合在一起

html - 在 Material-UI 中调暗/禁用 div 的最佳方法?

javascript - 在 ReactJS 中添加 URLSearchParams 条件

javascript - 组件中的 store.getState 或 mapStateToProps

javascript - 单击带有文本属性的 <span/> 未按预期工作

javascript - ng-filter 按输入的字符串标记

javascript - 如何使用 typescript 在 native 脚本中实现 Observable

bash - 从 shell 脚本运行 Jest 测试 - 失败导致脚本退出

javascript - 为什么我在 Gitlab CI 中出现 TypeError,但在运行 jest 时在我的机器上却没有?

javascript - e.stopPropagation() 没有按预期工作?