шутить имитация фермента («щелчок») с объектом события - PullRequest
0 голосов
/ 28 июня 2018

У меня проблема, когда я пытаюсь передать через имитацию объект события со значениями. Я получаю ошибку:

TypeError: Cannot read property 'value' of null

  at SingleSymbol.handleLotChange.event [as handleLotChange] (src/containers/SingleSymbol.js:95:46)
  at onClick (src/containers/SingleSymbol.js:145:40)
  at node_modules/enzyme-adapter-react-16/build/ReactSixteenAdapter.js:332:27

Я видел case , однако мне нужно передать весь объект события, созданный следующим образом:

const event = new Event('click', {"target":{"value":8}})

потому что в функции, обрабатывающей событие click, я использую функцию stopPropagation

handleLotChange = (event) => {
    event.stopPropagation()
    this.setState({lotValue: event.target.value})
  }

фрагмент тестируемого компонента:

(...)
          <Grid item xs={4}  >
            <TextField
              label="Lot"
              id="lot-value"
              value={this.state.lotValue}
              onChange={(event) => this.handleLotChange(event)}
              onClick={(event) => this.handleLotChange(event)}
              type="number"
              className={classes.lotGrid}
              InputLabelProps={{
                shrink: true,
              }}
              inputProps={{ min: "0", max: "10", step: "0.01" }}
            />
          </Grid>
(...)

сам тест:

  it('captures inserted Lot value', () => {
    const event = new Event('click', {"target":{"value":8}})
    const wrapper = shallow(<SingleSymbol data={dummy} classes={styles(theme)} />)
    wrapper.find('WithStyles(Paper)').simulate('click')
    wrapper.find('#lot-value').simulate('click', event)
    console.log(wrapper.state())
  })

1 Ответ

0 голосов
/ 29 июня 2018

Вам не нужно фактическое событие для передачи на simulate, вы можете просто передать простой объект с данными, которые нужны вашей функции-обработчику. Так что вы можете просто сделать:

wrapper.find('#lot-value').simulate('click', {"target":{"value":8}})

Редактировать: если вам нужно какое-либо поведение событий по умолчанию, вы можете добавить фиктивные функции вместо них (или даже имитировать, если хотите проверить, что они действительно вызываются). например,

wrapper.find('#lot-value').simulate('click', {
  target: { value: 8 },
  stopPropagation: () => {},
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...