From e2daf7f81789c54b23ade72bd164492e7304d375 Mon Sep 17 00:00:00 2001 From: Armand Philippot Date: Thu, 2 Nov 2023 15:33:29 +0100 Subject: feat(hooks): add an useTimeout hook --- src/utils/hooks/use-timeout/use-timeout.test.ts | 50 +++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 src/utils/hooks/use-timeout/use-timeout.test.ts (limited to 'src/utils/hooks/use-timeout/use-timeout.test.ts') diff --git a/src/utils/hooks/use-timeout/use-timeout.test.ts b/src/utils/hooks/use-timeout/use-timeout.test.ts new file mode 100644 index 0000000..296b320 --- /dev/null +++ b/src/utils/hooks/use-timeout/use-timeout.test.ts @@ -0,0 +1,50 @@ +import { + afterEach, + beforeEach, + describe, + expect, + it, + jest, +} from '@jest/globals'; +import { renderHook } from '@testing-library/react'; +import { useTimeout } from './use-timeout'; + +describe('useTimeout', () => { + beforeEach(() => { + jest.useFakeTimers(); + }); + + afterEach(() => { + jest.runOnlyPendingTimers(); + jest.useRealTimers(); + }); + + it('executes the given callback with default delay', () => { + // When less than 1ms, setTimeout use 1. Default delay is 0ms. + const defaultTimeoutDelay = 1; + const callback = jest.fn(); + renderHook(() => useTimeout(callback)); + + expect(callback).not.toHaveBeenCalled(); + + jest.advanceTimersByTime(defaultTimeoutDelay); + + expect(callback).toHaveBeenCalledTimes(1); + }); + + it('executes the given callback with custom delay', () => { + const customDelay = 1500; + const callback = jest.fn(); + renderHook(() => useTimeout(callback, customDelay)); + + expect(callback).not.toHaveBeenCalled(); + + jest.advanceTimersByTime(1); + + expect(callback).not.toHaveBeenCalled(); + + jest.advanceTimersByTime(customDelay); + + expect(callback).toHaveBeenCalledTimes(1); + }); +}); -- cgit v1.2.3