You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
38 lines
1.3 KiB
38 lines
1.3 KiB
import { describe, expect, it, vi } from "vitest";
|
|
import { executeWithGatewayRetry } from "@/lib/gateway-retry";
|
|
|
|
describe("lib/gateway-retry", () => {
|
|
it("首次 503 第二次 200 返回 200", async () => {
|
|
const handler = vi
|
|
.fn()
|
|
.mockResolvedValueOnce({ status: 503, body: { error: "down" } })
|
|
.mockResolvedValueOnce({ status: 200, body: { ok: true } });
|
|
|
|
const result = await executeWithGatewayRetry(handler);
|
|
expect(result.status).toBe(200);
|
|
expect(result.body).toEqual({ ok: true });
|
|
expect(handler).toHaveBeenCalledTimes(2);
|
|
});
|
|
|
|
it("连续 503 返回 INTERNAL_ERROR", async () => {
|
|
const handler = vi.fn().mockResolvedValue({ status: 503, body: null });
|
|
|
|
const result = await executeWithGatewayRetry(handler);
|
|
expect(result.status).toBe(503);
|
|
expect(result.body).toEqual({
|
|
code: "INTERNAL_ERROR",
|
|
message: "服务暂时不可用,请稍后重试",
|
|
data: null,
|
|
});
|
|
expect(handler).toHaveBeenCalledTimes(2);
|
|
});
|
|
|
|
it("首次 200 不重试", async () => {
|
|
const handler = vi.fn().mockResolvedValue({ status: 200, body: { ok: true } });
|
|
|
|
const result = await executeWithGatewayRetry(handler);
|
|
expect(result.status).toBe(200);
|
|
expect(handler).toHaveBeenCalledTimes(1);
|
|
});
|
|
});
|