@lobehub/chat
Version:
Lobe Chat - an open-source, high-performance chatbot framework that supports speech synthesis, multimodal, and extensible Function Call plugin system. Supports one-click free deployment of your private ChatGPT/LLM web application.
90 lines (76 loc) • 2.34 kB
text/typescript
import { afterEach, describe, expect, it, vi } from 'vitest';
import { ErrorResponse } from '@/types/fetch';
import { getMessageError } from '../parseError';
// 模拟 i18next
vi.mock('i18next', () => ({
t: vi.fn((key) => `translated_${key}`),
}));
// 模拟 Response
const createMockResponse = (body: any, ok: boolean, status: number = 200) => ({
ok,
status,
json: vi.fn(async () => body),
clone: vi.fn(function () {
// @ts-ignore
return this;
}),
text: vi.fn(async () => JSON.stringify(body)),
body: {
getReader: () => {
let done = false;
return {
read: () => {
if (!done) {
done = true;
return Promise.resolve({
value: new TextEncoder().encode(JSON.stringify(body)),
done: false,
});
} else {
return Promise.resolve({ done: true });
}
},
};
},
},
});
// 在每次测试后清理所有模拟
afterEach(() => {
vi.restoreAllMocks();
});
describe('getMessageError', () => {
it('should handle business error correctly', async () => {
const mockErrorResponse: ErrorResponse = {
body: 'Error occurred',
errorType: 'InvalidAccessCode',
};
const mockResponse = createMockResponse(mockErrorResponse, false, 400);
const error = await getMessageError(mockResponse as any);
expect(error).toEqual({
body: mockErrorResponse.body,
message: 'translated_response.InvalidAccessCode',
type: mockErrorResponse.errorType,
});
expect(mockResponse.json).toHaveBeenCalled();
});
it('should handle regular error correctly', async () => {
const mockResponse = createMockResponse({}, false, 500);
mockResponse.json.mockImplementationOnce(() => {
throw new Error('Failed to parse');
});
const error = await getMessageError(mockResponse as any);
expect(error).toEqual({
message: 'translated_response.500',
type: 500,
});
expect(mockResponse.json).toHaveBeenCalled();
});
it('should handle timeout error correctly', async () => {
const mockResponse = createMockResponse(undefined, false, 504);
const error = await getMessageError(mockResponse as any);
expect(error).toEqual({
message: 'translated_response.504',
type: 504,
});
});
});