first commit
This commit is contained in:
50
scripts/mini-preview.test.ts
Normal file
50
scripts/mini-preview.test.ts
Normal file
@@ -0,0 +1,50 @@
|
||||
import { describe, expect, it, vi } from "vitest";
|
||||
|
||||
describe("mini preview terminal qrcode redraw", async () => {
|
||||
const { normalizeRetryCount, renderTerminalQrcodeWithRetry } = await import("./mini-preview.mjs");
|
||||
|
||||
it("在第一次失败后会自动重画一次", async () => {
|
||||
const generateTerminalQrcode = vi
|
||||
.fn<(_: string) => Promise<string>>()
|
||||
.mockRejectedValueOnce(new Error("decode failed"))
|
||||
.mockResolvedValueOnce("terminal-qrcode");
|
||||
const onRetry = vi.fn();
|
||||
const onRecovered = vi.fn();
|
||||
|
||||
const result = await renderTerminalQrcodeWithRetry({
|
||||
qrcodeBase64: "demo",
|
||||
generateTerminalQrcode,
|
||||
maxRetries: 1,
|
||||
waitMs: 0,
|
||||
onRetry,
|
||||
onRecovered
|
||||
});
|
||||
|
||||
expect(result).toBe("terminal-qrcode");
|
||||
expect(generateTerminalQrcode).toHaveBeenCalledTimes(2);
|
||||
expect(onRetry).toHaveBeenCalledTimes(1);
|
||||
expect(onRecovered).toHaveBeenCalledWith({ attempt: 1, maxRetries: 1 });
|
||||
});
|
||||
|
||||
it("超过重画次数后会抛出最后一次错误", async () => {
|
||||
const finalError = new Error("still failed");
|
||||
const generateTerminalQrcode = vi.fn<(_: string) => Promise<string>>().mockRejectedValue(finalError);
|
||||
|
||||
await expect(
|
||||
renderTerminalQrcodeWithRetry({
|
||||
qrcodeBase64: "demo",
|
||||
generateTerminalQrcode,
|
||||
maxRetries: 1,
|
||||
waitMs: 0
|
||||
})
|
||||
).rejects.toThrow("still failed");
|
||||
expect(generateTerminalQrcode).toHaveBeenCalledTimes(2);
|
||||
});
|
||||
|
||||
it("重画次数会被归一化为非负整数", () => {
|
||||
expect(normalizeRetryCount(undefined)).toBe(1);
|
||||
expect(normalizeRetryCount("3.9")).toBe(3);
|
||||
expect(normalizeRetryCount("-1")).toBe(0);
|
||||
expect(normalizeRetryCount("bad", 2)).toBe(2);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user