import { afterEach, describe, expect, it, vi } from 'vitest'; import { postEditorDirectUploadFile } from './editorRetryOptions'; describe('editorRetryOptions', () => { afterEach(() => { vi.restoreAllMocks(); vi.unstubAllGlobals(); vi.useRealTimers(); }); it('retries direct editor uploads when the storage endpoint returns 429', async () => { vi.useFakeTimers(); const fetchMock = vi .fn() .mockResolvedValueOnce(new Response(null, { status: 429 })) .mockResolvedValueOnce(new Response(null, { status: 200 })); vi.stubGlobal('fetch', fetchMock); const uploadPromise = postEditorDirectUploadFile( { host: 'https://oss.example.com', formFields: { key: 'editor/demo.mp4', policy: 'policy' }, }, new File(['video'], 'demo.mp4', { type: 'video/mp4' }), '上传素材失败', ); await Promise.resolve(); expect(fetchMock).toHaveBeenCalledTimes(1); await vi.advanceTimersByTimeAsync(800); await uploadPromise; expect(fetchMock).toHaveBeenCalledTimes(2); expect(fetchMock).toHaveBeenLastCalledWith( 'https://oss.example.com', expect.objectContaining({ method: 'POST', body: expect.any(FormData), }), ); }); });