test: add test case for useId

This commit is contained in:
Evan You 2024-07-24 22:50:31 +08:00
parent 1b8e197a5b
commit 2a55f2267d
No known key found for this signature in database
GPG Key ID: 00E9AB7A6704CE0A
1 changed files with 48 additions and 6 deletions

View File

@ -95,8 +95,8 @@ describe('useId', () => {
'v:0-0 v:0-1 ' + // inside first async subtree
'v:1-0 v:1-1' // inside second async subtree
// assert different async resolution order does not affect id stable-ness
expect(await getOutput(() => factory(10, 20))).toBe(expected)
expect(await getOutput(() => factory(20, 10))).toBe(expected)
expect(await getOutput(() => factory(0, 16))).toBe(expected)
expect(await getOutput(() => factory(16, 0))).toBe(expected)
})
test('serverPrefetch', async () => {
@ -140,8 +140,8 @@ describe('useId', () => {
'v:0-0 v:0-1 ' + // inside first async subtree
'v:1-0 v:1-1' // inside second async subtree
// assert different async resolution order does not affect id stable-ness
expect(await getOutput(() => factory(10, 20))).toBe(expected)
expect(await getOutput(() => factory(20, 10))).toBe(expected)
expect(await getOutput(() => factory(0, 16))).toBe(expected)
expect(await getOutput(() => factory(16, 0))).toBe(expected)
})
test('async setup()', async () => {
@ -192,8 +192,8 @@ describe('useId', () => {
'v:1-0 v:1-1' + // inside second async subtree
'</div>'
// assert different async resolution order does not affect id stable-ness
expect(await getOutput(() => factory(10, 20))).toBe(expected)
expect(await getOutput(() => factory(20, 10))).toBe(expected)
expect(await getOutput(() => factory(0, 16))).toBe(expected)
expect(await getOutput(() => factory(16, 0))).toBe(expected)
})
test('deep nested', async () => {
@ -239,4 +239,46 @@ describe('useId', () => {
expect(await getOutput(() => factory())).toBe(expected)
expect(await getOutput(() => factory())).toBe(expected)
})
test('async component inside async setup', async () => {
const factory = (
delay1: number,
delay2: number,
): ReturnType<TestCaseFactory> => {
const p1 = promiseWithDelay(null, delay1)
const p2 = promiseWithDelay(BasicComponentWithUseId, delay2)
const AsyncInner = defineAsyncComponent(() => p2)
const AsyncSetup = defineComponent({
async setup() {
await p1
return {}
},
render() {
return h(AsyncInner)
},
})
const app = createApp({
setup() {
const id1 = useId()
const id2 = useId()
return () =>
h(Suspense, null, {
default: h('div', [id1, ' ', id2, ' ', h(AsyncSetup)]),
})
},
})
return [app, [p1, p2]]
}
const expected =
'<div>' +
'v:0 v:1 ' + // root
'v:0-0-0 v:0-0-1' + // async component inside async setup
'</div>'
// assert different async resolution order does not affect id stable-ness
expect(await getOutput(() => factory(0, 16))).toBe(expected)
expect(await getOutput(() => factory(16, 0))).toBe(expected)
})
})