Поскольку вы работаете с неконтролируемым компонентом , имитирующее изменение (то же самое, что вызов target.props.onChange(...)
) не будет работать.
Для веб-приложения это можно сделать с помощью мутации .value
вместо simulate('change', ...)
, но поскольку он является React Native, его TextInput в контролируемом компоненте должен быть снабжен явным обработчиком onChange / onChangeText.Тогда вы сможете использовать simulate('change')
так же, как и вы.
Последнее, что я хочу выделить: для управляемого компонента будет необходимо вызвать .update()
на оболочке фермента, какчто:
test('Button click returns text input value', () => {
obj.find('TextInput').first().simulate('change', { target: { value: 61606 } });
obj.update();
obj.find('Button').first().simulate('click');
expect(fn).toHaveBeenCalledWith([61606]); // also here you will retrieve array with values not single one
})
[UPD] на самом деле значение TextInput можно установить неконтролируемым образом через ref
(но я считаю, что его использование контролируемым образом лучше):
obj.instance()._textInputRefYouShouldBound.setNativeProps({text: '61606'});
obj.find('Button').first().simulate('click')
expect(fn).toHaveBeenCalledWith(['61606'])