9ad2152816
新增图片编辑器请求重试配置 生成请求遇到429等临时错误自动重试 上传凭证、资产确认和直传上传共用重试策略 补充图片编辑器重试参数和直传429测试
45 lines
1.2 KiB
TypeScript
45 lines
1.2 KiB
TypeScript
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),
|
|
}),
|
|
);
|
|
});
|
|
});
|