@@ -3,121 +3,101 @@ import { vi } from 'vitest';
33
44import { useDebounceCallback } from './useDebounceCallback' ;
55
6- beforeEach ( ( ) => {
7- vi . useFakeTimers ( ) ;
8- } ) ;
6+ beforeEach ( vi . useFakeTimers ) ;
97
108afterEach ( ( ) => {
119 vi . useRealTimers ( ) ;
1210 vi . restoreAllMocks ( ) ;
1311} ) ;
1412
1513it ( 'Should use debounce callback' , ( ) => {
16- const { result } = renderHook ( ( ) => useDebounceCallback ( vi . fn ( ) , 300 ) ) ;
14+ const { result } = renderHook ( ( ) => useDebounceCallback ( vi . fn ( ) , 100 ) ) ;
1715 expect ( result . current ) . toBeTypeOf ( 'function' ) ;
1816} ) ;
1917
2018it ( 'Should execute the callback only after delay' , ( ) => {
2119 const callback = vi . fn ( ) ;
22- const delay = 300 ;
2320
24- const { result } = renderHook ( ( ) => useDebounceCallback ( callback , delay ) ) ;
25- const debouncedFn = result . current ;
21+ const { result } = renderHook ( ( ) => useDebounceCallback ( callback , 100 ) ) ;
22+ const debouncedCallback = result . current ;
2623
27- act ( ( ) => {
28- debouncedFn ( ) ;
29- vi . advanceTimersByTime ( delay - 1 ) ;
30- } ) ;
31- expect ( callback ) . not . toBeCalled ( ) ;
24+ debouncedCallback ( ) ;
3225
33- act ( ( ) => {
34- vi . advanceTimersByTime ( 1 ) ;
35- } ) ;
36- expect ( callback ) . toBeCalledTimes ( 1 ) ;
26+ act ( ( ) => vi . advanceTimersByTime ( 99 ) ) ;
27+
28+ expect ( callback ) . not . toHaveBeenCalled ( ) ;
29+
30+ act ( ( ) => vi . advanceTimersByTime ( 1 ) ) ;
31+ expect ( callback ) . toHaveBeenCalledOnce ( ) ;
3732} ) ;
3833
3934it ( 'Should сancel the previous callback if a new one occurs before the delay' , ( ) => {
4035 const callback = vi . fn ( ) ;
41- const delay = 300 ;
4236
43- const { result } = renderHook ( ( ) => useDebounceCallback ( callback , delay ) ) ;
44- const debouncedFn = result . current ;
37+ const { result } = renderHook ( ( ) => useDebounceCallback ( callback , 100 ) ) ;
38+ const debouncedCallback = result . current ;
4539
46- act ( ( ) => {
47- debouncedFn ( ) ;
48- vi . advanceTimersByTime ( delay - 50 ) ;
49- debouncedFn ( ) ;
50- vi . advanceTimersByTime ( delay - 50 ) ;
51- } ) ;
52- expect ( callback ) . not . toBeCalled ( ) ;
40+ debouncedCallback ( ) ;
5341
54- act ( ( ) => {
55- vi . advanceTimersByTime ( 50 ) ;
56- } ) ;
57- expect ( callback ) . toBeCalledTimes ( 1 ) ;
58- } ) ;
42+ act ( ( ) => vi . advanceTimersByTime ( 50 ) ) ;
5943
60- it ( 'Should pass single argument into callback' , ( ) => {
61- const callback = vi . fn ( ) ;
62- const delay = 100 ;
44+ expect ( callback ) . not . toHaveBeenCalled ( ) ;
6345
64- const { result } = renderHook ( ( ) => useDebounceCallback ( callback , delay ) ) ;
65- const debouncedFn = result . current ;
46+ debouncedCallback ( ) ;
6647
67- act ( ( ) => {
68- debouncedFn ( 'argument' ) ;
69- vi . advanceTimersByTime ( delay ) ;
70- } ) ;
48+ act ( ( ) => vi . advanceTimersByTime ( 100 ) ) ;
7149
72- expect ( callback ) . toBeCalledWith ( 'argument' ) ;
50+ expect ( callback ) . toHaveBeenCalledOnce ( ) ;
7351} ) ;
7452
75- it ( 'Should pass multiple arguments into callback' , ( ) => {
53+ it ( 'Should pass parameters into callback' , ( ) => {
7654 const callback = vi . fn ( ) ;
77- const delay = 100 ;
7855
79- const { result } = renderHook ( ( ) => useDebounceCallback ( callback , delay ) ) ;
80- const debouncedFn = result . current ;
56+ const { result } = renderHook ( ( ) => useDebounceCallback ( callback , 100 ) ) ;
57+ const debouncedCallback = result . current ;
8158
82- act ( ( ) => {
83- debouncedFn ( 1 , 2 , 3 ) ;
84- vi . advanceTimersByTime ( delay ) ;
85- } ) ;
59+ debouncedCallback ( 1 , 2 , 3 ) ;
8660
87- expect ( callback ) . toBeCalledWith ( 1 , 2 , 3 ) ;
61+ act ( ( ) => vi . advanceTimersByTime ( 100 ) ) ;
62+
63+ expect ( callback ) . toHaveBeenCalledWith ( 1 , 2 , 3 ) ;
8864} ) ;
8965
9066it ( 'Should pass argument and cancel callbacks that called before delay' , ( ) => {
9167 const callback = vi . fn ( ) ;
92- const delay = 300 ;
93-
94- const { result } = renderHook ( ( ) => useDebounceCallback ( callback , delay ) ) ;
95- const debouncedFn = result . current ;
96-
97- act ( ( ) => {
98- debouncedFn ( 'first' ) ;
99- vi . advanceTimersByTime ( delay - 100 ) ;
100- debouncedFn ( 'second' ) ;
101- vi . advanceTimersByTime ( delay - 100 ) ;
102- debouncedFn ( 'third' ) ;
103- vi . advanceTimersByTime ( delay ) ;
104- } ) ;
10568
106- expect ( callback ) . toBeCalledTimes ( 1 ) ;
107- expect ( callback ) . toBeCalledWith ( 'third' ) ;
69+ const { result } = renderHook ( ( ) => useDebounceCallback ( callback , 100 ) ) ;
70+ const debouncedCallback = result . current ;
71+
72+ debouncedCallback ( 'first' ) ;
73+
74+ act ( ( ) => vi . advanceTimersByTime ( 99 ) ) ;
75+
76+ debouncedCallback ( 'second' ) ;
77+
78+ act ( ( ) => vi . advanceTimersByTime ( 100 ) ) ;
79+
80+ expect ( callback ) . toHaveBeenCalledOnce ( ) ;
81+ expect ( callback ) . toHaveBeenCalledWith ( 'second' ) ;
10882} ) ;
10983
110- it ( 'Should keep the same function between renders if delay is unchanged ' , ( ) => {
84+ it ( 'Should return new function when delay changes ' , ( ) => {
11185 const callback = vi . fn ( ) ;
112- const delay = 200 ;
11386
114- const { result, rerender } = renderHook ( ( { cb , d } ) => useDebounceCallback ( cb , d ) , {
115- initialProps : { cb : callback , d : delay }
87+ const { result, rerender } = renderHook ( ( delay ) => useDebounceCallback ( callback , delay ) , {
88+ initialProps : 100
11689 } ) ;
117- const first = result . current ;
90+ const debouncedCallback = result . current ;
91+
92+ debouncedCallback ( ) ;
93+
94+ act ( ( ) => vi . advanceTimersByTime ( 50 ) ) ;
95+ expect ( callback ) . not . toHaveBeenCalled ( ) ;
96+
97+ rerender ( 200 ) ;
11898
119- rerender ( { cb : callback , d : delay } ) ;
120- const second = result . current ;
99+ debouncedCallback ( ) ;
121100
122- expect ( first ) . toBe ( second ) ;
101+ act ( ( ) => vi . advanceTimersByTime ( 200 ) ) ;
102+ expect ( callback ) . toHaveBeenCalledOnce ( ) ;
123103} ) ;
0 commit comments