33 lines
1.2 KiB
TypeScript
33 lines
1.2 KiB
TypeScript
import { afterEach, beforeEach, expect, it, vi } from "vitest";
|
|
import { setToken } from "../src/api/client";
|
|
import { __resetImageCache, fetchObjectUrl } from "../src/lib/authImage";
|
|
|
|
beforeEach(() => {
|
|
__resetImageCache();
|
|
setToken("T");
|
|
(URL as any).createObjectURL = vi.fn(() => "blob:gen");
|
|
});
|
|
afterEach(() => vi.unstubAllGlobals());
|
|
|
|
it("blob → objectURL;同 URL 只发一次请求", async () => {
|
|
const f = vi.fn(async (_url: any, init: any) => {
|
|
expect(init.headers.Authorization).toBe("Bearer T");
|
|
return new Response(new Blob(["img"]), { status: 200 });
|
|
});
|
|
vi.stubGlobal("fetch", f);
|
|
expect(await fetchObjectUrl("/api/books/1/cover?v=h")).toBe("blob:gen");
|
|
expect(await fetchObjectUrl("/api/books/1/cover?v=h")).toBe("blob:gen");
|
|
expect(f).toHaveBeenCalledTimes(1);
|
|
});
|
|
|
|
it("失败不入缓存,重试重新请求", async () => {
|
|
let n = 0;
|
|
vi.stubGlobal("fetch", async () => {
|
|
n++;
|
|
return n === 1 ? new Response("x", { status: 500 }) : new Response(new Blob(["img"]), { status: 200 });
|
|
});
|
|
await expect(fetchObjectUrl("/api/books/2/pages/0?v=h")).rejects.toThrow();
|
|
expect(await fetchObjectUrl("/api/books/2/pages/0?v=h")).toBe("blob:gen");
|
|
expect(n).toBe(2);
|
|
});
|