UNPKG

@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
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, }); }); });