Luigit
repositories / pi-ext

pi-ext

bugabingas pi extensions

owned by admin

extensions/web/__tests__/lazy.test.ts

Raw
import { describe, expect, it } from "vitest";
import { lazy } from "../lazy";

describe("lazy", () => {
	it("shares one evaluation among concurrent callers", async () => {
		let calls = 0;
		let resolveLoad: (value: { ok: boolean }) => void = () => {};
		const load = lazy(() => {
			calls++;
			return new Promise<{ ok: boolean }>((resolve) => {
				resolveLoad = resolve;
			});
		});

		const first = load();
		const second = load();
		resolveLoad({ ok: true });

		await expect(first).resolves.toEqual({ ok: true });
		await expect(second).resolves.toEqual({ ok: true });
		expect(calls).toBe(1);
	});

	it("re-evaluates after a failed load", async () => {
		let calls = 0;
		const load = lazy(async () => {
			calls++;
			if (calls === 1) throw new Error("boom");
			return calls;
		});

		await expect(load()).rejects.toThrow("boom");
		await expect(load()).resolves.toBe(2);
	});
});