У меня есть проект, который раньше был обычным React-проектом (до того, как хуки обманули). Мой стек для тестирования включал шут + энзим.
Теперь хочу перейти на крючки, но я не могу заставить его работать. По какой-то причине мой экземпляр не будет обновляться при установленном обратном вызове.
Пример:
Учитывая тогда следующий компонент:
export type CounterReturnType = [number, () => void, () => void]
export function useCounter(): CounterReturnType {
const [count, setCount] = useState(0);
const increment = () => {
console.log('PRESSED')
setCount(count => count + 1)
}
const decrement = () => { setCount(count => count - 1) }
return [count, increment, decrement]
}
export default function HooksTest() {
const [count, increment, decrement] = useCounter();
return (
<View style={style.container}>
<View style={style.counter}>
<Text style={style.counterText} testID='counter'>{count}</Text>
</View>
<View style={style.actions}>
<Touchable style={style.increment} onPress={increment} testID='increment'>
<Text>Increment</Text>
</Touchable>
<Touchable style={style.decrement} onPress={decrement} testID='decrease'>
<Text>Decrement</Text>
</Touchable>
</View>
</View>
)
}
Я сделал простой тест, подобный следующему:
it('increment to 1 on click', async () => {
const component = shallow(<HooksTest />);
const counter = component.findWhere(node => node.prop("testID") === "counter")
const incrementButton = component.findWhere(node => node.prop("testID") === "increment")
incrementButton.simulate('press')
expect(counter.getElement().props.children).toEqual(1);
})
Но счетчик вообще не хочет обновляться. Есть ли способ заставить это работать, или я должен вместо этого использовать другую библиотеку?