From d21a48145a43fd812975a1848f4257884e515cd8 Mon Sep 17 00:00:00 2001 From: sun0day Date: Wed, 28 Sep 2022 12:47:31 +0800 Subject: [PATCH 1/3] fix(watchThrottled): incorrect remaining time --- packages/shared/utils/filters.ts | 2 +- packages/shared/watchThrottled/index.test.ts | 34 ++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 packages/shared/watchThrottled/index.test.ts diff --git a/packages/shared/utils/filters.ts b/packages/shared/utils/filters.ts index 9ee57339a7d..4b065f47205 100644 --- a/packages/shared/utils/filters.ts +++ b/packages/shared/utils/filters.ts @@ -134,7 +134,7 @@ export function throttleFilter(ms: MaybeComputedRef, trailing = true, le isLeading = true clear() invoke() - }, duration) + }, duration - elapsed) } if (!leading && !timer) diff --git a/packages/shared/watchThrottled/index.test.ts b/packages/shared/watchThrottled/index.test.ts new file mode 100644 index 00000000000..ab375dd76fb --- /dev/null +++ b/packages/shared/watchThrottled/index.test.ts @@ -0,0 +1,34 @@ +import { nextTick, ref } from 'vue-demi' +import { promiseTimeout } from '../utils' +import { throttledWatch, watchThrottled } from '.' + +describe('watchThrottled', () => { + it('should export module', () => { + expect(watchThrottled).toBeDefined() + expect(throttledWatch).toBeDefined() + }) + + it('should work', async () => { + const num = ref(0) + const cb = vi.fn() + watchThrottled(num, cb, { throttle: 100 }) + + num.value = 1 + await nextTick() + expect(cb).toHaveBeenCalledWith(1, 0, expect.anything()) + + num.value = 2 + await promiseTimeout(50) + expect(cb).toHaveBeenCalledTimes(1) + + num.value = 3 + await promiseTimeout(50) + expect(cb).toHaveBeenCalledTimes(2) + expect(cb).toHaveBeenCalledWith(3, 2, expect.anything()) + + num.value = 4 + await promiseTimeout(100) + expect(cb).toHaveBeenCalledTimes(3) + expect(cb).toHaveBeenCalledWith(4, 3, expect.anything()) + }) +}) From 0ad7ecf437edd6d343b2f5bf6b68ce53bd216a71 Mon Sep 17 00:00:00 2001 From: sun0day Date: Wed, 28 Sep 2022 14:37:50 +0800 Subject: [PATCH 2/3] test(throttleFilter): should throttle evenly --- packages/shared/utils/index.test.ts | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/packages/shared/utils/index.test.ts b/packages/shared/utils/index.test.ts index d9d9c679f5b..3f02238241a 100644 --- a/packages/shared/utils/index.test.ts +++ b/packages/shared/utils/index.test.ts @@ -77,6 +77,23 @@ describe('filters', () => { expect(debouncedFilterSpy).toHaveBeenCalledTimes(2) }) + it('should throttle evenly', () => { + const debouncedFilterSpy = vitest.fn() + + const filter = createFilterWrapper(throttleFilter(1000), debouncedFilterSpy) + + setTimeout(() => filter(1), 500) + setTimeout(() => filter(2), 1000) + setTimeout(() => filter(3), 2000) + + vitest.runAllTimers() + + expect(debouncedFilterSpy).toHaveBeenCalledTimes(3) + expect(debouncedFilterSpy).toHaveBeenCalledWith(1) + expect(debouncedFilterSpy).toHaveBeenCalledWith(2) + expect(debouncedFilterSpy).toHaveBeenCalledWith(3) + }) + it('should throttle with ref', () => { const debouncedFilterSpy = vitest.fn() const throttle = ref(0) From 4deddd6424e278f0d6e58feecbf7e22c3b1b5f14 Mon Sep 17 00:00:00 2001 From: sun0day Date: Tue, 25 Oct 2022 15:28:08 +0800 Subject: [PATCH 3/3] test(watchDebounced):watchDebounced make sure exceed maxwait time --- packages/shared/watchDebounced/index.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/shared/watchDebounced/index.test.ts b/packages/shared/watchDebounced/index.test.ts index 5e4bdd5baa2..aa176c02324 100644 --- a/packages/shared/watchDebounced/index.test.ts +++ b/packages/shared/watchDebounced/index.test.ts @@ -39,7 +39,7 @@ describe('watchDebounced', () => { expect(cb).toHaveBeenCalledTimes(1) num.value = 5 - await promiseTimeout(70) + await promiseTimeout(75) expect(cb).toHaveBeenCalledTimes(2) expect(cb).toHaveBeenCalledWith(4, 2, expect.anything()) })