29 lines
866 B
TypeScript
29 lines
866 B
TypeScript
import { describe, expect, it, vi } from "vitest";
|
|
|
|
import { retryAsync } from "./retry.js";
|
|
|
|
describe("retryAsync", () => {
|
|
it("returns on first success", async () => {
|
|
const fn = vi.fn().mockResolvedValue("ok");
|
|
const result = await retryAsync(fn, 3, 10);
|
|
expect(result).toBe("ok");
|
|
expect(fn).toHaveBeenCalledTimes(1);
|
|
});
|
|
|
|
it("retries then succeeds", async () => {
|
|
const fn = vi
|
|
.fn()
|
|
.mockRejectedValueOnce(new Error("fail1"))
|
|
.mockResolvedValueOnce("ok");
|
|
const result = await retryAsync(fn, 3, 1);
|
|
expect(result).toBe("ok");
|
|
expect(fn).toHaveBeenCalledTimes(2);
|
|
});
|
|
|
|
it("propagates after exhausting retries", async () => {
|
|
const fn = vi.fn().mockRejectedValue(new Error("boom"));
|
|
await expect(retryAsync(fn, 2, 1)).rejects.toThrow("boom");
|
|
expect(fn).toHaveBeenCalledTimes(2);
|
|
});
|
|
});
|