Skip to content

Commit 8bb3f4d

Browse files
committedJun 18, 2020
chore: added timeout tests
1 parent 822098c commit 8bb3f4d

9 files changed

+161
-68
lines changed
 

‎README.md

+1
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
- **Well-documented** and typed interfaces.
2727
- **Zero-config** server-side rendering capability.
2828
- **Self-contained** with no dependencies.
29+
- **Backed by a team** using VueHooks in production.
2930
- **Additional addons** such as vue-router, timeago, etc.
3031

3132
<br />
+34-51
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import { renderHook } from '../../../testing/src'
21
import { useCounter } from '../useCounter'
32

43
describe('useCounter', () => {
@@ -12,76 +11,60 @@ describe('useCounter', () => {
1211
})
1312

1413
it('increments', () => {
15-
renderHook(() => {
16-
const { count, inc } = useCounter()
17-
expect(count.value).toEqual(0)
18-
inc(10)
19-
expect(count.value).toEqual(10)
20-
})
14+
const { count, inc } = useCounter()
15+
expect(count.value).toEqual(0)
16+
inc(10)
17+
expect(count.value).toEqual(10)
2118
})
2219

2320
it('increments defaults 1', () => {
24-
renderHook(() => {
25-
const { count, inc } = useCounter()
26-
expect(count.value).toEqual(0)
27-
inc()
28-
expect(count.value).toEqual(1)
29-
})
21+
const { count, inc } = useCounter()
22+
expect(count.value).toEqual(0)
23+
inc()
24+
expect(count.value).toEqual(1)
3025
})
3126

3227
it('decrements', () => {
33-
renderHook(() => {
34-
const { count, dec } = useCounter(10)
35-
expect(count.value).toEqual(10)
36-
dec(10)
37-
expect(count.value).toEqual(0)
38-
})
28+
const { count, dec } = useCounter(10)
29+
expect(count.value).toEqual(10)
30+
dec(10)
31+
expect(count.value).toEqual(0)
3932
})
4033

4134
it('increments defaults -1', () => {
42-
renderHook(() => {
43-
const { count, dec } = useCounter()
44-
expect(count.value).toEqual(0)
45-
dec()
46-
expect(count.value).toEqual(-1)
47-
})
35+
const { count, dec } = useCounter()
36+
expect(count.value).toEqual(0)
37+
dec()
38+
expect(count.value).toEqual(-1)
4839
})
4940

5041
it('resets', () => {
51-
renderHook(() => {
52-
const { count, inc, reset } = useCounter(10)
53-
expect(count.value).toEqual(10)
54-
inc(10)
55-
reset()
56-
expect(count.value).toEqual(10)
57-
})
42+
const { count, inc, reset } = useCounter(10)
43+
expect(count.value).toEqual(10)
44+
inc(10)
45+
reset()
46+
expect(count.value).toEqual(10)
5847
})
5948

6049
it('resets and with new initial value', () => {
61-
renderHook(() => {
62-
const { count, inc, reset } = useCounter(10)
63-
expect(count.value).toEqual(10)
64-
inc(10)
65-
reset(5)
66-
expect(count.value).toEqual(5)
67-
inc(10)
68-
reset()
69-
expect(count.value).toEqual(5)
70-
})
50+
const { count, inc, reset } = useCounter(10)
51+
expect(count.value).toEqual(10)
52+
inc(10)
53+
reset(5)
54+
expect(count.value).toEqual(5)
55+
inc(10)
56+
reset()
57+
expect(count.value).toEqual(5)
7158
})
7259

7360
it('sets value', () => {
74-
renderHook(() => {
75-
const { count, set } = useCounter(5)
76-
set(2)
77-
expect(count.value).toEqual(2)
78-
})
61+
const { count, set } = useCounter(5)
62+
set(2)
63+
expect(count.value).toEqual(2)
7964
})
8065

8166
it('returns count on get', () => {
82-
renderHook(() => {
83-
const { count, get } = useCounter(5, 0, 20)
84-
expect(count.value).toEqual(get())
85-
})
67+
const { count, get } = useCounter(5, 0, 20)
68+
expect(count.value).toEqual(get())
8669
})
8770
})
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
import { useTimeout } from '../useTimeout'
2+
3+
describe('useTimeout', () => {
4+
beforeAll(() => jest.useFakeTimers())
5+
6+
it('does not start without start()', () => {
7+
const { ready } = useTimeout(10)
8+
expect(ready.value).toBeFalsy()
9+
})
10+
11+
it('sets value after period', () => {
12+
const { ready, start } = useTimeout(10)
13+
start()
14+
expect(setTimeout).toHaveBeenCalledWith(expect.any(Function), 10)
15+
jest.advanceTimersByTime(1)
16+
expect(ready.value).toBeFalsy()
17+
jest.runOnlyPendingTimers()
18+
expect(ready.value).toBeTruthy()
19+
})
20+
21+
it('can stop a timeout', () => {
22+
const { ready, stop, start } = useTimeout(10)
23+
start()
24+
25+
jest.advanceTimersByTime(1)
26+
27+
expect(ready.value).toBeFalsy()
28+
stop()
29+
30+
jest.runOnlyPendingTimers()
31+
expect(ready.value).toBeFalsy()
32+
})
33+
34+
it('can start when created', () => {
35+
const { ready } = useTimeout(10, true)
36+
jest.runOnlyPendingTimers()
37+
expect(ready.value).toBeTruthy()
38+
})
39+
40+
it('clears timer on complete', () => {
41+
const { ready } = useTimeout(10, true)
42+
jest.runOnlyPendingTimers()
43+
expect(ready.value).toBeTruthy()
44+
expect(clearTimeout).toBeCalled()
45+
})
46+
47+
it('clears timer on stop', () => {
48+
const { stop } = useTimeout(10, true)
49+
jest.advanceTimersByTime(5)
50+
stop()
51+
expect(clearTimeout).toBeCalled()
52+
})
53+
})
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import Vue from 'vue'
2+
import { useTimeoutFn } from '../useTimeoutFn'
3+
import { renderHook } from '../../../testing/src'
4+
5+
describe('useTimeoutFn', () => {
6+
const fn = jest.fn()
7+
8+
beforeAll(() => jest.useFakeTimers())
9+
beforeEach(() => fn.mockReset())
10+
11+
it('calls function', async () => {
12+
renderHook(() => {
13+
const { start } = useTimeoutFn(fn, 10)
14+
start()
15+
})
16+
jest.runOnlyPendingTimers()
17+
await Vue.nextTick()
18+
expect(fn).toHaveBeenCalled()
19+
})
20+
})
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import { useToggle } from '../useToggle'
2+
3+
describe('useToggle', () => {
4+
it('has correct functions returned', () => {
5+
const { on, toggle, set } = useToggle()
6+
expect(on.value).toBeFalsy()
7+
expect(toggle).toBeDefined()
8+
expect(set).toBeDefined()
9+
})
10+
11+
it('sets initial value', () => {
12+
const { on } = useToggle(true)
13+
expect(on.value).toBeTruthy()
14+
})
15+
16+
it('toggles value', () => {
17+
const { on, toggle } = useToggle()
18+
toggle()
19+
expect(on.value).toBeTruthy()
20+
toggle()
21+
expect(on.value).toBeFalsy()
22+
})
23+
24+
it('sets value with', () => {
25+
const { on, toggle } = useToggle()
26+
toggle(false)
27+
expect(on.value).toBeFalsy()
28+
toggle(true)
29+
expect(on.value).toBeTruthy()
30+
})
31+
32+
it('sets value', () => {
33+
const { on, set } = useToggle()
34+
set(false)
35+
expect(on.value).toBeFalsy()
36+
set(true)
37+
expect(on.value).toBeTruthy()
38+
})
39+
})

‎packages/core/src/useTimeout.ts

+10-9
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import { ref, getCurrentInstance } from '@vue/composition-api'
1+
import { ref } from '@vue/composition-api'
22

3-
export function useTimeout(ms: number, now: boolean = false) {
3+
export function useTimeout(ms: number, immediate: boolean = false) {
44
let ready = ref(false)
55
let timer: any = null
66

@@ -19,14 +19,15 @@ export function useTimeout(ms: number, now: boolean = false) {
1919
// Called to stop timer
2020
const stop = () => {
2121
ready.value = false
22-
if (timer) {
23-
clearTimeout(timer)
24-
timer = null
25-
}
22+
clearTimeout(timer)
23+
timer = null
2624
}
2725

28-
if (now) start()
29-
if (getCurrentInstance()) stop()
26+
if (immediate) start()
3027

31-
return { start, stop, ready }
28+
return {
29+
start,
30+
stop,
31+
ready
32+
}
3233
}

‎packages/core/src/useTimeoutFn.ts

+2-6
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,8 @@
11
import { watch } from '@vue/composition-api'
22
import { useTimeout } from './useTimeout'
33

4-
export function useTimeoutFn(
5-
fn: (...args: any[]) => any,
6-
ms: number,
7-
...args: any[]
8-
) {
4+
export function useTimeoutFn(fn: (...args: any[]) => any, ms: number) {
95
const { ready, start, stop } = useTimeout(ms)
10-
watch(ready, ready => ready && fn(...args))
6+
watch(ready, ready => ready && fn())
117
return { ready, start, stop }
128
}

‎packages/core/src/useToggle.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { ref } from '@vue/composition-api'
22

33
const isNull = (v: any) => v == null
44

5-
export default function useToggle(value: boolean = false) {
5+
export function useToggle(value: boolean = false) {
66
const on = ref(value)
77
const set = (v: boolean) => (on.value = v)
88
const toggle = (v?: boolean) => set(isNull(v) ? !on.value : v!)

‎tsconfig.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,6 @@
3434
"@vuehooks/jest": ["./packages/testing/src/index.ts"]
3535
}
3636
},
37-
"include": ["packages"],
37+
"include": ["packages", "setupTest.ts"],
3838
"exclude": ["node_modules", "dist", "**/*.spec.ts", "**/*.stories.ts"]
3939
}

0 commit comments

Comments
 (0)
Please sign in to comment.