Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 595b7f8

Browse files
committed
Changed custom hook example and test to be a simpler useCounter hook
1 parent c656268 commit 595b7f8

File tree

4 files changed

+58
-91
lines changed

4 files changed

+58
-91
lines changed

‎README.md‎

Lines changed: 29 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -59,72 +59,56 @@ Using this library, you do not have to concern yourself with how to construct, r
5959
## Example
6060

6161
```js
62-
// useTheme.js
63-
import { useState, createContext, useContext, useMemo } from 'react'
62+
// useCounter.js
63+
import { useState } from 'react'
6464

65-
const themes = {
66-
light: { primaryLight: '#FFFFFF', primaryDark: '#000000' },
67-
dark: { primaryLight: '#000000', primaryDark: '#FFFFFF' }
68-
}
65+
function useCounter(initialCount = 0) {
66+
const [count, setCount] = useState(initialCount)
6967

70-
const ThemesContext = createContext(themes)
68+
const incrementBy = useCallback((n) => setCount(count + n), [count])
69+
const decrementBy = useCallback((n) => setCount(count - n), [count])
7170

72-
const useTheme = (initialTheme) => {
73-
const themes = useContext(ThemesContext)
74-
const [theme, setTheme] = useState(initialTheme)
75-
const toggleTheme = () => {
76-
setTheme(theme === 'light' ? 'dark' : 'light')
77-
}
78-
return useMemo(() => ({ ...themes[theme], toggleTheme }), [theme])
71+
return { count, incrementBy, decrementBy }
7972
}
73+
74+
export default useCounter
8075
```
8176

8277
```js
83-
// useTheme.test.js
78+
// useCounter.test.js
8479
import { renderHook, cleanup, act } from 'react-hooks-testing-library'
80+
import useCounter from './useCounter'
8581

86-
describe('custom hook tests', () => {
87-
afterEach(cleanup)
88-
89-
test('should use theme', () => {
90-
const { result } = renderHook(() => useTheme('light'))
82+
afterEach(cleanup)
9183

92-
const theme = result.current
84+
test('should create counter', () => {
85+
const { result } = renderHook(() => useCounter())
9386

94-
expect(theme.primaryLight).toBe('#FFFFFF')
95-
expect(theme.primaryDark).toBe('#000000')
96-
})
87+
expect(result.current.count).toBe(0)
88+
})
9789

98-
test('should update theme', () => {
99-
const { result } = renderHook(() => useTheme('light'))
90+
test('should increment counter', () => {
91+
const { result } = renderHook(() => useCounter())
10092

101-
const { toggleTheme } = result.current
93+
act(() => result.current.incrementBy(1))
10294

103-
act(() =>toggleTheme())
95+
expect(result.current.count).toBe(1)
10496

105-
consttheme= result.current
97+
act(() => result.current.incrementBy(2))
10698

107-
expect(theme.primaryLight).toBe('#000000')
108-
expect(theme.primaryDark).toBe('#FFFFFF')
109-
})
99+
expect(result.current.count).toBe(3)
100+
})
110101

111-
test('should use custom theme', () => {
112-
const customThemes = {
113-
light: { primaryLight: '#AABBCC', primaryDark: '#CCBBAA' },
114-
dark: { primaryLight: '#CCBBAA', primaryDark: '#AABBCC' }
115-
}
102+
test('should decrement counter', () => {
103+
const { result } = renderHook(() => useCounter())
116104

117-
const wrapper = ({ children }) => (
118-
<ThemesContext.Provider value={customThemes}>{children}</ThemesContext.Provider>
119-
)
105+
act(() => result.current.decrementBy(1))
120106

121-
const { result } =renderHook(() =>useTheme('light'), { wrapper })
107+
expect(result.current.count).toBe(-1)
122108

123-
consttheme= result.current
109+
act(() => result.current.decrementBy(2))
124110

125-
expect(theme.primaryLight).toBe('#AABBCC')
126-
expect(theme.primaryDark).toBe('#CCBBAA')
127-
})
111+
expect(result.current.count).toBe(-3)
128112
})
129113
```
130114

‎package-lock.json‎

Lines changed: 7 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎package.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343
"babel-eslint": "^10.0.1",
4444
"babel-plugin-module-resolver": "^3.2.0",
4545
"codecov": "^3.2.0",
46-
"eslint": "^5.15.1",
46+
"eslint": "^5.15.2",
4747
"eslint-config-prettier": "^4.1.0",
4848
"eslint-plugin-prettier": "^3.0.1",
4949
"husky": "^1.3.1",

‎test/customHook.test.js‎

Lines changed: 21 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,62 +1,45 @@
1-
import React,{ useState, createContext,useContext,useMemo } from 'react'
1+
import { useState, useCallback } from 'react'
22
import { renderHook, cleanup, act } from 'src'
33

44
describe('custom hook tests', () => {
5-
const themes = {
6-
light: { primaryLight: '#FFFFFF', primaryDark: '#000000' },
7-
dark: { primaryLight: '#000000', primaryDark: '#FFFFFF' }
8-
}
5+
function useCounter(initialCount = 0) {
6+
const [count, setCount] = useState(initialCount)
97

10-
const ThemesContext = createContext(themes)
8+
const incrementBy = useCallback((n) => setCount(count + n), [count])
9+
const decrementBy = useCallback((n) => setCount(count - n), [count])
1110

12-
const useTheme = (initialTheme) => {
13-
const themes = useContext(ThemesContext)
14-
const [theme, setTheme] = useState(initialTheme)
15-
const toggleTheme = () => {
16-
setTheme(theme === 'light' ? 'dark' : 'light')
17-
}
18-
return useMemo(() => ({ ...themes[theme], toggleTheme }), [theme])
11+
return { count, incrementBy, decrementBy }
1912
}
2013

2114
afterEach(cleanup)
2215

23-
test('should use theme', () => {
24-
const { result } = renderHook(() => useTheme('light'))
25-
26-
const theme = result.current
16+
test('should create counter', () => {
17+
const { result } = renderHook(() => useCounter())
2718

28-
expect(theme.primaryLight).toBe('#FFFFFF')
29-
expect(theme.primaryDark).toBe('#000000')
19+
expect(result.current.count).toBe(0)
3020
})
3121

32-
test('should update theme', () => {
33-
const { result } = renderHook(() => useTheme('light'))
22+
test('should increment counter', () => {
23+
const { result } = renderHook(() => useCounter())
3424

35-
const{ toggleTheme }= result.current
25+
act(()=> result.current.incrementBy(1))
3626

37-
act(()=>toggleTheme())
27+
expect(result.current.count).toBe(1)
3828

39-
consttheme= result.current
29+
act(()=> result.current.incrementBy(2))
4030

41-
expect(theme.primaryLight).toBe('#000000')
42-
expect(theme.primaryDark).toBe('#FFFFFF')
31+
expect(result.current.count).toBe(3)
4332
})
4433

45-
test('should use custom theme', () => {
46-
const customThemes = {
47-
light: { primaryLight: '#AABBCC', primaryDark: '#CCBBAA' },
48-
dark: { primaryLight: '#CCBBAA', primaryDark: '#AABBCC' }
49-
}
34+
test('should decrement counter', () => {
35+
const { result } = renderHook(() => useCounter())
5036

51-
const wrapper = ({ children }) => (
52-
<ThemesContext.Provider value={customThemes}>{children}</ThemesContext.Provider>
53-
)
37+
act(() => result.current.decrementBy(1))
5438

55-
const{ result }=renderHook(()=>useTheme('light'),{ wrapper })
39+
expect(result.current.count).toBe(-1)
5640

57-
consttheme= result.current
41+
act(()=> result.current.decrementBy(2))
5842

59-
expect(theme.primaryLight).toBe('#AABBCC')
60-
expect(theme.primaryDark).toBe('#CCBBAA')
43+
expect(result.current.count).toBe(-3)
6144
})
6245
})

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /