Не могу имитировать событие клика с шуткой - PullRequest
0 голосов
/ 05 мая 2019

Я новичок в тестировании с использованием Jest и мне нужно смоделировать событие нажатия. Я был в состоянии выбрать элемент с помощью энзимных селекторов 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>

1 Ответ

1 голос
/ 06 мая 2019

глядя на источник GameBoard handleClick, мы видим, что он не вызывает 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...