This commit is contained in:
2026-08-11 20:02:38 +08:00
parent 41618847b7
commit 7ece30bffa
6 changed files with 81 additions and 9 deletions
+34
View File
@@ -104,4 +104,38 @@ describe('API error diagnostics', () => {
expect(refresh).toHaveBeenCalledTimes(1)
expect(expired).toHaveBeenCalledTimes(1)
})
it('refreshes once and replays the original request with the rotated access token', async () => {
const refresh = vi.fn(async () => 'access-rotated')
const expired = vi.fn()
let orderRequests = 0
registerAuthRefreshHandler(refresh)
registerAuthSessionExpiredHandler(expired)
http.defaults.adapter = async (config) => {
if (config.url === '/platform/v1/orders' && orderRequests++ === 0) {
throw new axios.AxiosError('Unauthorized', 'ERR_BAD_REQUEST', config, undefined, {
status: 401,
statusText: 'Unauthorized',
headers: {},
config,
data: { code: 'A0401', message: '登录状态已过期' },
})
}
return {
status: 200,
statusText: 'OK',
headers: {},
config,
data: { code: '200', message: 'success', data: [{ id: 'order-1' }] },
}
}
const response = await http.get('/platform/v1/orders')
expect(refresh).toHaveBeenCalledTimes(1)
expect(expired).not.toHaveBeenCalled()
expect(orderRequests).toBe(2)
expect(response.config.headers.Authorization).toBe('Bearer access-rotated')
expect(response.data).toEqual([{ id: 'order-1' }])
})
})