diff --git a/src/__tests__/asyncHook.fakeTimers.test.ts b/src/__tests__/asyncHook.fakeTimers.test.ts new file mode 100644 index 00000000..98d6b2c9 --- /dev/null +++ b/src/__tests__/asyncHook.fakeTimers.test.ts @@ -0,0 +1,58 @@ +describe('async hook (fake timers) tests', () => { + beforeEach(() => { + jest.useFakeTimers() + }) + + afterEach(() => { + jest.useRealTimers() + }) + + runForRenderers(['default', 'dom', 'native', 'server/hydrated'], ({ renderHook }) => { + test('should wait for arbitrary expectation to pass when using advanceTimersByTime()', async () => { + const { waitFor } = renderHook(() => null) + + let actual = 0 + const expected = 1 + + setTimeout(() => { + actual = expected + }, 200) + + let complete = false + + jest.advanceTimersByTime(200) + + await waitFor(() => { + expect(actual).toBe(expected) + complete = true + }) + + expect(complete).toBe(true) + }) + + test('should wait for arbitrary expectation to pass when using runOnlyPendingTimers()', async () => { + const { waitFor } = renderHook(() => null) + + let actual = 0 + const expected = 1 + + setTimeout(() => { + actual = expected + }, 200) + + let complete = false + + jest.runOnlyPendingTimers() + + await waitFor(() => { + expect(actual).toBe(expected) + complete = true + }) + + expect(complete).toBe(true) + }) + }) +}) + +// eslint-disable-next-line jest/no-export +export {}