Files
react/components/utils-shared/__tests__/current-state.test.tsx
unix 3a8dd34010 chore: upgrade deps
style(prettier): format code style
2020-05-06 14:51:15 +08:00

46 lines
1.4 KiB
TypeScript

import React, { useEffect } from 'react'
import { mount } from 'enzyme'
import useCurrentState from '../use-current-state'
import { renderHook, act } from '@testing-library/react-hooks'
describe('UseCurrentState', () => {
it('should work correctly', () => {
const { result } = renderHook(() => useCurrentState(''))
expect(result.current[0]).toEqual('')
act(() => result.current[1]('test'))
expect(result.current[0]).toEqual('test')
expect(result.current[2].current).toEqual('test')
})
it('functional update mode should be supported', () => {
const { result } = renderHook(() => useCurrentState(0))
expect(result.current[0]).toEqual(0)
act(() => result.current[1](pre => pre + 10))
expect(result.current[0]).toEqual(10)
expect(result.current[2].current).toEqual(10)
})
it('only ref should track latest value', () => {
const Mock: React.FC<{}> = () => {
const [state, setState, stateRef] = useCurrentState('')
useEffect(() => {
return () => {
setTimeout(() => {
expect(state).not.toEqual('test2')
expect(stateRef.current).toEqual('test2')
}, 0)
}
}, [])
useEffect(() => {
setState('test')
setState('test2')
}, [])
return <span />
}
const wrapper = mount(<Mock />)
expect(() => wrapper.unmount()).not.toThrow()
})
})