Skip to content

Commit cd60fa4

Browse files
Lei ChenLei Chen
Lei Chen
authored and
Lei Chen
committed
add tests to prove jest useFakeTimers is supported
1 parent eff2ca6 commit cd60fa4

File tree

3 files changed

+164
-0
lines changed

3 files changed

+164
-0
lines changed

Diff for: src/dom/__tests__/asyncHook.test.ts

+57
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,63 @@ describe('async hook tests', () => {
101101
expect(complete).toBe(true)
102102
})
103103

104+
test('should wait for arbitrary expectation to pass when use jest.usedFakeTimers() and advanceTimersByTime()', async () => {
105+
try {
106+
jest.useFakeTimers()
107+
108+
const { waitFor } = renderHook(() => null)
109+
110+
let actual = 0
111+
const expected = 1
112+
113+
setTimeout(() => {
114+
actual = expected
115+
}, 200)
116+
let complete = false
117+
jest.advanceTimersByTime(200)
118+
await waitFor(
119+
() => {
120+
expect(actual).toBe(expected)
121+
complete = true
122+
},
123+
{ timeout: 250, interval: 10 }
124+
)
125+
126+
expect(complete).toBe(true)
127+
} catch {
128+
} finally {
129+
jest.useRealTimers()
130+
}
131+
})
132+
test('should wait for arbitrary expectation to pass when use jest.usedFakeTimers() and runOnlyPendingTimers() ', async () => {
133+
try {
134+
jest.useFakeTimers()
135+
136+
const { waitFor } = renderHook(() => null)
137+
138+
let actual = 0
139+
const expected = 1
140+
141+
setTimeout(() => {
142+
actual = expected
143+
}, 200)
144+
let complete = false
145+
jest.runOnlyPendingTimers()
146+
await waitFor(
147+
() => {
148+
expect(actual).toBe(expected)
149+
complete = true
150+
},
151+
{ timeout: 250, interval: 10 }
152+
)
153+
154+
expect(complete).toBe(true)
155+
} catch {
156+
} finally {
157+
jest.useRealTimers()
158+
}
159+
})
160+
104161
test('should not hang if expectation is already passing', async () => {
105162
const { result, waitFor } = renderHook(() => useSequence(['first', 'second']))
106163

Diff for: src/native/__tests__/asyncHook.test.ts

+51
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,57 @@ describe('async hook tests', () => {
101101
expect(complete).toBe(true)
102102
})
103103

104+
test('should wait for arbitrary expectation to pass when use jest.usedFakeTimers() and advanceTimersByTime()', async () => {
105+
try {
106+
jest.useFakeTimers()
107+
const { waitFor } = renderHook(() => null)
108+
109+
let actual = 0
110+
const expected = 1
111+
112+
setTimeout(() => {
113+
actual = expected
114+
}, 200)
115+
116+
let complete = false
117+
jest.advanceTimersByTime(200)
118+
await waitFor(() => {
119+
expect(actual).toBe(expected)
120+
complete = true
121+
})
122+
123+
expect(complete).toBe(true)
124+
} catch {
125+
} finally {
126+
jest.useRealTimers()
127+
}
128+
})
129+
test('should wait for arbitrary expectation to pass when use jest.usedFakeTimers() and runOnlyPendingTimers()', async () => {
130+
try {
131+
jest.useFakeTimers()
132+
const { waitFor } = renderHook(() => null)
133+
134+
let actual = 0
135+
const expected = 1
136+
137+
setTimeout(() => {
138+
actual = expected
139+
}, 200)
140+
141+
let complete = false
142+
jest.runOnlyPendingTimers()
143+
await waitFor(() => {
144+
expect(actual).toBe(expected)
145+
complete = true
146+
})
147+
148+
expect(complete).toBe(true)
149+
} catch {
150+
} finally {
151+
jest.useRealTimers()
152+
}
153+
})
154+
104155
test('should not hang if expectation is already passing', async () => {
105156
const { result, waitFor } = renderHook(() => useSequence(['first', 'second']))
106157

Diff for: src/server/__tests__/asyncHook.test.ts

+56
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,62 @@ describe('async hook tests', () => {
129129
expect(complete).toBe(true)
130130
})
131131

132+
test('should wait for arbitrary expectation to pass when use jest.usedFakeTimers() and advanceTimersByTime()', async () => {
133+
try {
134+
jest.useFakeTimers()
135+
const { waitFor, hydrate } = renderHook(() => null)
136+
137+
hydrate()
138+
139+
let actual = 0
140+
const expected = 1
141+
142+
setTimeout(() => {
143+
actual = expected
144+
}, 200)
145+
146+
let complete = false
147+
jest.advanceTimersByTime(200)
148+
await waitFor(() => {
149+
expect(actual).toBe(expected)
150+
complete = true
151+
})
152+
153+
expect(complete).toBe(true)
154+
} catch {
155+
} finally {
156+
jest.useRealTimers()
157+
}
158+
})
159+
test('should wait for arbitrary expectation to pass when use jest.usedFakeTimers() and runOnlyPendingTimers()', async () => {
160+
try {
161+
jest.useFakeTimers()
162+
163+
const { waitFor, hydrate } = renderHook(() => null)
164+
165+
hydrate()
166+
167+
let actual = 0
168+
const expected = 1
169+
170+
setTimeout(() => {
171+
actual = expected
172+
}, 200)
173+
174+
let complete = false
175+
jest.runOnlyPendingTimers()
176+
await waitFor(() => {
177+
expect(actual).toBe(expected)
178+
complete = true
179+
})
180+
181+
expect(complete).toBe(true)
182+
} catch {
183+
} finally {
184+
jest.useRealTimers()
185+
}
186+
})
187+
132188
test('should not hang if expectation is already passing', async () => {
133189
const { result, hydrate, waitFor } = renderHook(() => useSequence(['first', 'second']))
134190

0 commit comments

Comments
 (0)