import { fetchLinkPreview } from '../fetchLinkPreview'; const mockGetLinkPreviewFn = jest.fn(); jest.mock('link-preview-js', () => ({ getLinkPreview: async () => { mockGetLinkPreviewFn(); }, })); describe('Test "fetchLinkPreview"', () => { test( 'fetchLinkPreview should merge same request', async () => { await Promise.all([ fetchLinkPreview('foo'), fetchLinkPreview('foo'), fetchLinkPreview('foo'), fetchLinkPreview('foo'), fetchLinkPreview('foo'), fetchLinkPreview('foo'), fetchLinkPreview('foo'), fetchLinkPreview('foo'), ]); expect(mockGetLinkPreviewFn.mock.calls.length).toBe(1); await sleep(5 * 1000); // 度过窗口期 await Promise.all([ fetchLinkPreview('foo'), fetchLinkPreview('foo'), fetchLinkPreview('foo'), fetchLinkPreview('foo'), fetchLinkPreview('foo'), fetchLinkPreview('foo'), fetchLinkPreview('foo'), fetchLinkPreview('foo'), ]); expect(mockGetLinkPreviewFn.mock.calls.length).toBe(2); }, 10 * 1000 ); }); function sleep(ms: number): Promise { return new Promise((resolve) => setTimeout(() => { resolve(); }, ms) ); }