@@ -42,6 +42,33 @@ describe('watchDebounced', () => {
42
42
num . value = 5
43
43
await vi . advanceTimersByTimeAsync ( 75 )
44
44
expect ( cb ) . toHaveBeenCalledTimes ( 2 )
45
- expect ( cb ) . toHaveBeenCalledWith ( 4 , 2 , expect . anything ( ) )
45
+ expect ( cb ) . toHaveBeenCalledWith ( 5 , 4 , expect . anything ( ) )
46
+ } )
47
+
48
+ it ( 'should work with constant changes over multiple maxWaits' , async ( ) => {
49
+ vi . useFakeTimers ( )
50
+ const num = ref ( 0 )
51
+ const cb = vi . fn ( )
52
+
53
+ const constantUpdateOverTime = async ( ms : number ) => {
54
+ for ( let i = 0 ; i < ms ; i ++ ) {
55
+ num . value += 1
56
+ await vi . advanceTimersByTimeAsync ( 1 )
57
+ }
58
+ }
59
+ watchDebounced ( num , cb , { debounce : 10 , maxWait : 50 } )
60
+ expect ( cb ) . toHaveBeenCalledTimes ( 0 )
61
+ await constantUpdateOverTime ( 49 )
62
+ expect ( cb ) . toHaveBeenCalledTimes ( 0 )
63
+ await constantUpdateOverTime ( 1 )
64
+ expect ( cb ) . toHaveBeenCalledTimes ( 1 )
65
+ await constantUpdateOverTime ( 50 )
66
+ expect ( cb ) . toHaveBeenCalledTimes ( 2 )
67
+ await constantUpdateOverTime ( 50 )
68
+
69
+ expect ( cb ) . toHaveBeenCalledTimes ( 3 )
70
+ expect ( cb . mock . calls [ 0 ] [ 0 ] ) . toBe ( 50 )
71
+ expect ( cb . mock . calls [ 1 ] [ 0 ] ) . toBe ( 100 )
72
+ expect ( cb . mock . calls [ 2 ] [ 0 ] ) . toBe ( 150 )
46
73
} )
47
74
} )
0 commit comments