修复全量审查问题;接入vitest;精简IdP图标逻辑
CI / test (push) Successful in 46s

This commit is contained in:
2026-07-22 16:51:45 +08:00
parent efcb84eaa8
commit 119f60516c
39 changed files with 1164 additions and 797 deletions
+66
View File
@@ -0,0 +1,66 @@
import { describe, expect, it } from 'vitest'
import { useAsync } from './useAsync'
/** 手动控制解析时机的 fetcher,复现请求乱序返回 */
function deferredFetcher<T>() {
const pending: Array<{ resolve: (v: T) => void; reject: (e: unknown) => void }> = []
const fetcher = () =>
new Promise<T>((resolve, reject) => {
pending.push({ resolve, reject })
})
return { fetcher, pending }
}
describe('useAsync 并发与乱序', () => {
it('后发请求先返回时,先发请求的迟到结果被丢弃', async () => {
const { fetcher, pending } = deferredFetcher<string>()
const st = useAsync(fetcher, false)
const p1 = st.run()
const p2 = st.run()
pending[1].resolve('新')
await p2
pending[0].resolve('旧')
await p1
expect(st.data.value).toBe('新')
expect(st.loading.value).toBe(false)
})
it('迟到的失败不覆盖最新成功结果', async () => {
const { fetcher, pending } = deferredFetcher<string>()
const st = useAsync(fetcher, false)
const p1 = st.run()
const p2 = st.run()
pending[1].resolve('新')
await p2
pending[0].reject(new Error('旧请求失败'))
await p1
expect(st.data.value).toBe('新')
expect(st.error.value).toBe('')
})
it('silent 刷新不置 loading,普通刷新置 loading', async () => {
const { fetcher, pending } = deferredFetcher<number>()
const st = useAsync(fetcher, false)
const p1 = st.run({ silent: true })
expect(st.loading.value).toBe(false)
pending[0].resolve(1)
await p1
const p2 = st.run()
expect(st.loading.value).toBe(true)
pending[1].resolve(2)
await p2
expect(st.loading.value).toBe(false)
expect(st.data.value).toBe(2)
})
it('失败时记录 error 并清 loading', async () => {
const { fetcher, pending } = deferredFetcher<string>()
const st = useAsync(fetcher, false)
const p1 = st.run()
pending[0].reject(new Error('boom'))
await p1
expect(st.error.value).toBe('boom')
expect(st.loading.value).toBe(false)
expect(st.data.value).toBeNull()
})
})