test: add coverage

This commit is contained in:
Alex Yang
2025-12-29 14:26:23 +08:00
parent 68ee6c64f8
commit 771bfa0d9b
2 changed files with 66 additions and 0 deletions

View File

@@ -0,0 +1,65 @@
import { describe, expect, it, vi } from "vitest";
import { createDynamicPathProxy } from "./proxy";
describe("createDynamicPathProxy", () => {
it("should avoid duplicate signal processing", async () => {
const client = vi.fn(async (path, options) => {
if (options?.onSuccess) {
await options.onSuccess({} as any);
}
return {
data: {},
error: null,
};
});
const knownPathMethods = {
"/test": "POST",
} as const;
const signalSet = vi.fn();
const signalGet = vi.fn(() => false);
const atoms = {
testSignal: {
get: signalGet,
set: signalSet,
subscribe: () => () => {},
listen: () => () => {},
off: () => {},
value: false,
} as any,
};
const atomListeners = [
{
matcher: (path: string) => path === "/test",
signal: "testSignal",
},
{
matcher: (path: string) => path === "/test",
signal: "testSignal",
},
];
const proxy = createDynamicPathProxy(
{
test: {},
},
client as any,
knownPathMethods,
atoms,
atomListeners,
);
vi.useFakeTimers();
await (proxy.test as any)();
expect(client).toHaveBeenCalled();
vi.runAllTimers();
expect(signalSet).toHaveBeenCalledTimes(1);
vi.useRealTimers();
});
});

View File

@@ -101,6 +101,7 @@ export function createDynamicPathProxy<T extends Record<string, any>>(
*/
const matches = atomListeners.filter((s) => s.matcher(routePath));
if (!matches.length) return;
const visited = new Set<ClientAtomListener["signal"]>();
for (const match of matches) {
const signal = atoms[match.signal as any];