Есть ли способ деструктурировать атрибуты данных, переданные функции onClick в шутку? - PullRequest
0 голосов
/ 23 апреля 2020

handleClick () - это функция, которую я пытаюсь протестировать:

this.state = {
  expanded: {},
}     
handleClick = (e) => {
const { dataset } = e.target

this.setState((prevState) => ({
  expanded: {
    ...prevState.expanded,
    [dataset.id]: !prevState.expanded[dataset.id],
  },
}))}

Функция handleClick и dataId передаются в качестве опоры дочернему компоненту Icon:

<Icon
          icon={
            this.state.expanded[this.props.id] === false ? "plus" : "minus"
          }
          size="sm"
          dataId={this.props.id}
          onClick={this.handleClick}
        />

Функция handleClick () вызывается при нажатии значка:

const Icon = props => {
      const { icon, size, dataId = null, onClick = null } = props
      return (
               <i
                 className={`fa fa-${icon} fa-${size}`}
                 data-id={dataId}
                 onClick={onClick}
               />
             )
     }

Это мой тестовый пример в шутку для handleClick ():

it("should update state when handleClick is invoked", () => {
      const mockExpanded = {}
      mockExpanded[initialProps.id] = false
      wrapper.setState({ expanded: mockExpanded })

      const mockEvent = {
       target: wrapper.find("Icon").dive().find("i").debug(), //need to pass target value as 
       an object
      }
      wrapper.instance().handleClick(mockEvent)
      expect(wrapper.state().expanded[initialProps.id]).toBe(true)   })

Даже после передачи mockEvent в качестве целевого объекта в handleClick (e) кажется, что тестовый пример не может деструктурировать атрибут data-id:

TypeError: Cannot read property 'id' of undefined

  27 |       expanded: {
  28 |         ...prevState.expanded,
> 29 |         [dataset.id]: !prevState.expanded[dataset.id],
     |                  ^
  30 |       },
  31 |     }))
  32 |   }

Пожалуйста, предложите способ деструктурирования набора данных в тесте jest или правильный способ тестирования метода handleClick (e).

1 Ответ

0 голосов
/ 23 апреля 2020
it("should update state when handleClick is invoked", () => {
const mockExpanded = {}
mockExpanded[initialProps.id] = false
wrapper.setState({ expanded: mockExpanded })

const mockEvent = {
  target: { dataset: { id: initialProps.id } },
}
wrapper.instance().handleClick(mockEvent)

expect(wrapper.state().expanded[initialProps.id]).toBe(true)

})

...