У меня есть простой компонент-оболочка React для материала-пользовательского интерфейса TextField
. Я пытаюсь использовать энзим и simulate
для запуска событий в базовом TextField, которые обрабатываются в моем компоненте, и есть разница в поведении между использованием shallow
и использованием mount
, которую я не понимаю. Когда я пытаюсь смоделировать событие keyup
, используя либо мелкое, либо монтирование, обработчик событий работает так, как я ожидал. Когда я пытаюсь смоделировать событие change
, кажется, что ничего не происходит для случая монтирования, но, похоже, он работает при использовании мелкой обработки.
В моем примере теста ниже, я ожидал увидеть вывод консоли от обоих мои обработчики событий, но я не вижу вывода для события change в случае, когда я использую mount. Я знаю, что в данном конкретном случае c мне не нужно использовать mount, но я хотел бы понять это поведение в тех случаях, когда мне нужно mount.
Как правильно вызвать событие изменения при использовании mount
ed компонента?
import React from 'react'
import { mount, shallow } from 'enzyme'
import TextField from '@material-ui/core/TextField'
const MyTextField = (props: any) => {
const handleChange = (e: any) => {
console.log('in handleChange')
}
const handleKeyUp = (e: any) => {
console.log('in handleKeyUp')
}
return <TextField onChange={handleChange} onKeyUp={handleKeyUp} />
}
it('should do something', () => {
const shallowWrapped = shallow(<MyTextField />)
shallowWrapped.find(TextField).simulate('keyup', {}) // "in handleKeyUp" output to console
shallowWrapped.find(TextField).simulate('change', { target: { value: 'test' } }) // "in handleChange" output to console
const mountWrapped = mount(<MyTextField />)
mountWrapped.find(TextField).simulate('keyup', {}) // "in handleKeyUp" output to console
// The below line doesn't seem to work as I expect...
mountWrapped.find(TextField).simulate('change', { target: { value: 'test' } }) // nothing is output to console
})