Skip to content

Commit 9331f90

Browse files
authored
Merge pull request #252 from retyui/update-tests
Add simple tests & update dev dependencies
2 parents b2e751a + 4319c91 commit 9331f90

File tree

6 files changed

+1305
-759
lines changed

6 files changed

+1305
-759
lines changed

.circleci/config.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ version: 2.1
22

33

44
orbs:
5-
rn: react-native-community/react-native@4.1.1
5+
rn: react-native-community/react-native@5.5.0
66

77

88
jobs:

package.json

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,21 +22,21 @@
2222
"@auto-it/all-contributors": "9.28.3",
2323
"@auto-it/first-time-contributor": "9.28.3",
2424
"@react-native-community/eslint-config": "1.1.0",
25-
"@testing-library/react-hooks": "3.2.1",
26-
"@testing-library/react-native": "5.0.3",
27-
"@types/jest": "25.2.3",
25+
"@testing-library/react-hooks": "7.0.2",
26+
"@testing-library/react-native": "7.2.0",
27+
"@types/jest": "27.0.2",
2828
"@types/react": "16.14.17",
2929
"@types/react-native": "0.62.18",
3030
"all-contributors-cli": "6.15.0",
3131
"auto": "9.26.8",
3232
"eslint": "7.3.1",
3333
"eslint-plugin-prettier": "3.1.4",
34-
"jest": "26.0.1",
34+
"jest": "27.2.5",
3535
"prettier": "2.4.1",
3636
"react": "16.13.1",
3737
"react-native": "0.62.3",
3838
"react-test-renderer": "16.13.1",
39-
"ts-jest": "25.5.1",
39+
"ts-jest": "27.0.5",
4040
"typescript": "3.9.10"
4141
},
4242
"author": "Nader Dabit",
@@ -46,6 +46,7 @@
4646
},
4747
"license": "ISC",
4848
"files": [
49-
"lib"
49+
"lib",
50+
"!*.test.*"
5051
]
5152
}

src/useBackHandler.test.ts

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
import {useBackHandler} from './useBackHandler'
2+
import {renderHook} from '@testing-library/react-hooks'
3+
import {BackHandler} from 'react-native'
4+
5+
jest.mock('react-native', () => ({
6+
BackHandler: {
7+
addEventListener: jest.fn(),
8+
removeEventListener: jest.fn(),
9+
},
10+
}))
11+
12+
describe('useBackHandler', () => {
13+
const addEventListenerMock = BackHandler.addEventListener as jest.Mock
14+
const removeEventListenerMock = BackHandler.removeEventListener as jest.Mock
15+
16+
beforeEach(() => {
17+
jest.clearAllMocks()
18+
})
19+
20+
it('should add back press listener on mount', () => {
21+
const handler = jest.fn()
22+
23+
renderHook((props) => useBackHandler(props.handler), {
24+
initialProps: {handler},
25+
})
26+
27+
expect(addEventListenerMock).toBeCalledTimes(1)
28+
expect(addEventListenerMock).toBeCalledWith('hardwareBackPress', handler)
29+
})
30+
31+
it('should resubscribe when passed handler will change', () => {
32+
const handler = jest.fn()
33+
const handler2 = jest.fn()
34+
35+
const {rerender} = renderHook((props) => useBackHandler(props.handler), {
36+
initialProps: {handler},
37+
})
38+
39+
expect(addEventListenerMock).toBeCalledWith('hardwareBackPress', handler)
40+
41+
rerender({handler: handler2})
42+
43+
expect(removeEventListenerMock).toBeCalledWith('hardwareBackPress', handler)
44+
expect(addEventListenerMock).toBeCalledWith('hardwareBackPress', handler2)
45+
})
46+
47+
it('should remove back press listener on unmount', () => {
48+
const handler = jest.fn()
49+
50+
const {unmount} = renderHook((props) => useBackHandler(props.handler), {
51+
initialProps: {handler},
52+
})
53+
54+
expect(removeEventListenerMock).toBeCalledTimes(0)
55+
56+
unmount()
57+
58+
expect(removeEventListenerMock).toBeCalledTimes(1)
59+
expect(removeEventListenerMock).toBeCalledWith('hardwareBackPress', handler)
60+
})
61+
})

src/useInteractionManager.test.ts

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import {useInteractionManager} from './useInteractionManager'
2+
import {act, renderHook} from '@testing-library/react-hooks'
3+
import {InteractionManager} from 'react-native'
4+
5+
jest.mock('react-native', () => ({
6+
InteractionManager: {
7+
runAfterInteractions: jest.fn(),
8+
},
9+
}))
10+
11+
describe('useInteractionManager', () => {
12+
const runAfterInteractionsMock =
13+
InteractionManager.runAfterInteractions as jest.Mock
14+
15+
it('should return false by default', () => {
16+
const {result} = renderHook(() => useInteractionManager())
17+
18+
expect(result.current).toBe(false)
19+
})
20+
21+
it('should return true after all interactions have completed', () => {
22+
let emitAfterInteractions = () => {}
23+
24+
runAfterInteractionsMock.mockImplementationOnce((cb) => {
25+
emitAfterInteractions = cb
26+
})
27+
28+
const {result} = renderHook(() => useInteractionManager())
29+
30+
expect(result.current).toBe(false)
31+
32+
act(() => {
33+
emitAfterInteractions()
34+
})
35+
36+
expect(result.current).toBe(true)
37+
})
38+
})

src/useLayout.test.ts

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,29 @@
1-
import {renderHook} from '@testing-library/react-hooks'
1+
import {renderHook, act} from '@testing-library/react-hooks'
22

33
import {useLayout} from './useLayout'
44

5-
describe('bla', () => {
6-
it('should increment counter', () => {
5+
describe('useLayout', () => {
6+
it('should return default state', () => {
77
const {result} = renderHook(() => useLayout())
88

99
expect(result.current.x).toBe(0)
1010
expect(result.current.y).toBe(0)
1111
expect(result.current.width).toBe(0)
1212
expect(result.current.height).toBe(0)
1313
})
14+
15+
it('should update state when layout change', () => {
16+
const {result} = renderHook(() => useLayout())
17+
18+
act(() => {
19+
const layout = {x: 1, y: 2, width: 3, height: 4}
20+
21+
result.current.onLayout({nativeEvent: {layout}})
22+
})
23+
24+
expect(result.current.x).toBe(1)
25+
expect(result.current.y).toBe(2)
26+
expect(result.current.width).toBe(3)
27+
expect(result.current.height).toBe(4)
28+
})
1429
})

0 commit comments

Comments
 (0)