26 lines
811 B
JavaScript
26 lines
811 B
JavaScript
import assert from 'node:assert/strict';
|
|
import { api } from '../src/client/api.mjs';
|
|
|
|
const originalFetch = globalThis.fetch;
|
|
let calls = 0;
|
|
let release;
|
|
globalThis.fetch = async () => {
|
|
calls += 1;
|
|
await new Promise(resolve => { release = resolve; });
|
|
return new Response(JSON.stringify({ ok: true, calls }), { status: 200, headers: { 'Content-Type': 'application/json' } });
|
|
};
|
|
|
|
try {
|
|
const first = api('/api/large-ledger');
|
|
const second = api('/api/large-ledger');
|
|
await Promise.resolve();
|
|
assert.equal(calls, 1, '并发的相同 GET 请求应只发送一次');
|
|
release();
|
|
assert.deepEqual(await first, { ok: true, calls: 1 });
|
|
assert.deepEqual(await second, { ok: true, calls: 1 });
|
|
} finally {
|
|
globalThis.fetch = originalFetch;
|
|
}
|
|
|
|
console.log('API read deduplication tests passed');
|