Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 08d9d2f

Browse files
committed
test: use fake timers for watch params test
1 parent 56773be commit 08d9d2f

File tree

1 file changed

+57
-52
lines changed

1 file changed

+57
-52
lines changed

test/nuxt/use-async-data.test.ts

Lines changed: 57 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -900,58 +900,63 @@ describe('useAsyncData', () => {
900900

901901
// https://github.com/nuxt/nuxt/issues/33777
902902
it('should continue watching params after reactive key changes', async () => {
903-
const id = ref('1')
904-
const page = ref(0)
905-
const promiseFn = vi.fn((id: string, page: number) => Promise.resolve(`id: ${id}, page: ${page}`))
906-
907-
const params = computed(() => ({ id: id.value, page: page.value }))
908-
909-
const { data, error } = await useAsyncData(
910-
() => `data-${id.value}`,
911-
() => promiseFn(params.value.id, params.value.page),
912-
{
913-
watch: [params],
914-
immediate: true,
915-
},
916-
)
917-
918-
// Initial call
919-
expect(data.value).toBe('id: 1, page: 0')
920-
expect(promiseFn).toHaveBeenCalledTimes(1)
921-
expect(promiseFn).toHaveBeenLastCalledWith('1', 0)
922-
923-
// Change key: id changes from '1' to '2'
924-
id.value = '2'
925-
await nextTick()
926-
await flushPromises()
927-
await new Promise(resolve => setTimeout(resolve, 5))
928-
929-
expect(promiseFn).toHaveBeenCalledTimes(2)
930-
expect(promiseFn).toHaveBeenLastCalledWith('2', 0)
931-
expect(error.value).toBe(undefined)
932-
expect(data.value).toBe('id: 2, page: 0')
933-
934-
// Verify params watcher continues to work after key change (issue #33777)
935-
page.value = 1
936-
await nextTick()
937-
await flushPromises()
938-
await new Promise(resolve => setTimeout(resolve, 5))
939-
940-
expect(promiseFn).toHaveBeenCalledTimes(3)
941-
expect(promiseFn).toHaveBeenLastCalledWith('2', 1)
942-
expect(error.value).toBe(undefined)
943-
expect(data.value).toBe('id: 2, page: 1')
944-
945-
// Another params change to be thorough
946-
page.value = 2
947-
await nextTick()
948-
await flushPromises()
949-
await new Promise(resolve => setTimeout(resolve, 5))
950-
951-
expect(promiseFn).toHaveBeenCalledTimes(4)
952-
expect(promiseFn).toHaveBeenLastCalledWith('2', 2)
953-
expect(error.value).toBe(undefined)
954-
expect(data.value).toBe('id: 2, page: 2')
903+
vi.useFakeTimers()
904+
try {
905+
const id = ref('1')
906+
const page = ref(0)
907+
const promiseFn = vi.fn((id: string, page: number) => Promise.resolve(`id: ${id}, page: ${page}`))
908+
909+
const params = computed(() => ({ id: id.value, page: page.value }))
910+
911+
const { data, error } = await useAsyncData(
912+
() => `data-${id.value}`,
913+
() => promiseFn(params.value.id, params.value.page),
914+
{
915+
watch: [params],
916+
immediate: true,
917+
},
918+
)
919+
920+
// Initial call
921+
expect(data.value).toBe('id: 1, page: 0')
922+
expect(promiseFn).toHaveBeenCalledTimes(1)
923+
expect(promiseFn).toHaveBeenLastCalledWith('1', 0)
924+
925+
// Change key: id changes from '1' to '2'
926+
id.value = '2'
927+
await nextTick()
928+
await flushPromises()
929+
await vi.advanceTimersByTimeAsync(5)
930+
931+
expect(promiseFn).toHaveBeenCalledTimes(2)
932+
expect(promiseFn).toHaveBeenLastCalledWith('2', 0)
933+
expect(error.value).toBe(undefined)
934+
expect(data.value).toBe('id: 2, page: 0')
935+
936+
// Verify params watcher continues to work after key change (issue #33777)
937+
page.value = 1
938+
await nextTick()
939+
await flushPromises()
940+
await vi.advanceTimersByTimeAsync(5)
941+
942+
expect(promiseFn).toHaveBeenCalledTimes(3)
943+
expect(promiseFn).toHaveBeenLastCalledWith('2', 1)
944+
expect(error.value).toBe(undefined)
945+
expect(data.value).toBe('id: 2, page: 1')
946+
947+
// Another params change to be thorough
948+
page.value = 2
949+
await nextTick()
950+
await flushPromises()
951+
await vi.advanceTimersByTimeAsync(5)
952+
953+
expect(promiseFn).toHaveBeenCalledTimes(4)
954+
expect(promiseFn).toHaveBeenLastCalledWith('2', 2)
955+
expect(error.value).toBe(undefined)
956+
expect(data.value).toBe('id: 2, page: 2')
957+
} finally {
958+
vi.useRealTimers()
959+
}
955960
})
956961

957962
it('should trigger AbortController on clear', () => {

0 commit comments

Comments
 (0)