11import { useDebounce } from '../'
2- import { describe , expect , it , vi } from 'vitest'
3- import { useFakeTimers } from 'sinon'
2+ import { afterEach , beforeEach , describe , expect , it , vi } from 'vitest'
3+ import { SinonFakeTimers , useFakeTimers } from 'sinon'
4+ import { createRoot } from 'solid-js'
45
56describe ( 'useDebounce' , ( ) => {
7+ let timer : SinonFakeTimers
8+
9+ beforeEach ( ( ) => {
10+ timer = useFakeTimers ( )
11+ } )
12+ afterEach ( ( ) => {
13+ timer . restore ( )
14+ } )
615 it ( 'should debounce calling the callback function' , ( ) => {
7- const timer = useFakeTimers ( )
816 const options = { leading : true }
917 const args = [ 'hello' ]
1018 const callback = vi . fn ( )
11- const debounce = useDebounce ( callback , 100 , options )
19+ const { debounce, dispose} = createRoot ( ( dispose ) => {
20+ const debounce = useDebounce ( callback , 100 , options )
21+
22+ return { debounce, dispose}
23+ } )
1224
1325 debounce . execute ( ...args )
1426 expect ( callback ) . toHaveBeenCalledTimes ( 1 )
@@ -20,6 +32,58 @@ describe('useDebounce', () => {
2032 expect ( callback ) . toHaveBeenCalledTimes ( 1 )
2133 timer . tick ( 100 )
2234 expect ( callback ) . toHaveBeenCalledTimes ( 2 )
23- timer . restore ( )
35+ dispose ( )
36+ } )
37+ it ( 'should cancel debounce with dispose' , ( ) => {
38+ const options = { leading : true }
39+ const args = [ 'hello' ]
40+ const callback = vi . fn ( )
41+ const { debounce, dispose} = createRoot ( ( dispose ) => {
42+ const debounce = useDebounce ( callback , 100 , options )
43+
44+ return { debounce, dispose}
45+ } )
46+
47+ debounce . execute ( ...args )
48+ timer . tick ( 50 )
49+ debounce . execute ( ...args )
50+ dispose ( )
51+ timer . tick ( 100 )
52+ expect ( callback ) . toHaveBeenCalledTimes ( 1 )
53+ } )
54+ it ( 'should cancel debounce' , ( ) => {
55+ const options = { leading : true }
56+ const args = [ 'hello' ]
57+ const callback = vi . fn ( )
58+ const { debounce} = createRoot ( ( dispose ) => {
59+ const debounce = useDebounce ( callback , 100 , options )
60+
61+ return { debounce, dispose}
62+ } )
63+
64+ debounce . execute ( ...args )
65+ timer . tick ( 50 )
66+ debounce . execute ( ...args )
67+ debounce . cancel ( )
68+ timer . tick ( 100 )
69+ expect ( callback ) . toHaveBeenCalledTimes ( 1 )
70+ } )
71+ it ( 'should flush debounce' , ( ) => {
72+ const options = { leading : true }
73+ const args = [ 'hello' ]
74+ const callback = vi . fn ( )
75+ const { debounce} = createRoot ( ( dispose ) => {
76+ const debounce = useDebounce ( callback , 100 , options )
77+
78+ return { debounce, dispose}
79+ } )
80+
81+ debounce . execute ( ...args )
82+ timer . tick ( 50 )
83+ debounce . execute ( ...args )
84+ debounce . flush ( )
85+ expect ( callback ) . toHaveBeenCalledTimes ( 2 )
86+ timer . tick ( 100 )
87+ expect ( callback ) . toHaveBeenCalledTimes ( 2 )
2488 } )
2589} )
0 commit comments