44 lines
1.4 KiB
TypeScript
44 lines
1.4 KiB
TypeScript
import axios, { AxiosHeaders } from 'axios'
|
|||
|
|
import { describe, expect, it } from 'vitest'
|
||
|
|
import { ApiResponseError, getApiErrorDetails, unwrapApiResponse } from './http'
|
||
|
|
|
||
|
|
describe('API error diagnostics', () => {
|
||
|
|
it('keeps business request and trace identifiers when unwrapping fails', () => {
|
||
|
|
expect(() => unwrapApiResponse({
|
||
|
|
code: 'A0403',
|
||
|
|
message: '无权限',
|
||
|
|
data: null,
|
||
|
|
requestId: 'request-1',
|
||
|
|
traceId: 'trace-1',
|
||
|
|
})).toThrow(ApiResponseError)
|
||
|
|
|
||
|
|
try {
|
||
|
|
unwrapApiResponse({ code: 'A0403', message: '无权限', data: null, requestId: 'request-1', traceId: 'trace-1' })
|
||
|
|
} catch (error) {
|
||
|
|
expect(getApiErrorDetails(error)).toEqual({
|
||
|
|
message: '无权限',
|
||
|
|
code: 'A0403',
|
||
|
|
requestId: 'request-1',
|
||
|
|
traceId: 'trace-1',
|
||
|
|
})
|
||
|
|
}
|
||
|
|
})
|
||
|
|
|
||
|
|
it('extracts identifiers from an HTTP error envelope', () => {
|
||
|
|
const error = new axios.AxiosError('Request failed', 'ERR_BAD_RESPONSE', undefined, undefined, {
|
||
|
|
status: 503,
|
||
|
|
statusText: 'Service Unavailable',
|
||
|
|
headers: {},
|
||
|
|
config: { headers: new AxiosHeaders() },
|
||
|
|
data: { code: 'S0503', message: '服务不可用', requestId: 'request-2', traceId: 'trace-2' },
|
||
|
|
})
|
||
|
|
|
||
|
|
expect(getApiErrorDetails(error)).toEqual({
|
||
|
|
message: '服务不可用',
|
||
|
|
code: 'S0503',
|
||
|
|
requestId: 'request-2',
|
||
|
|
traceId: 'trace-2',
|
||
|
|
})
|
||
|
|
})
|
||
|
|
})
|