Ctrl K
ComunidadGuías…

frontend/test/managed-lifetime.test.ts

Rama master · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
import { expect, it, vi } from 'vitest';

it('应用收起全部页面时同时取消未落地预取,晚到响应不挂宿主', async () => {
  vi.resetModules();
  const managed = await import('../src/history/managed');
  const container = document.createElement('div');
  container.textContent = '正在读取'; document.body.append(container);
  let signal: AbortSignal | undefined;
  let release = () => {}, entered = () => {};
  const gate = new Promise<void>(resolve => { release = resolve; });
  const started = new Promise<void>(resolve => { entered = resolve; });
  managed.connectManagedRoutes(Promise.resolve(async (_path, _props, current) => {
    signal = current; entered(); await gate;
  }));
  const place = vi.fn(() => container);
  const opened = managed.openManagedRoute('/', {}, { container, isCurrent: () => true, place });
  await started;
  managed.releaseAllManagedRoutes();
  expect(signal?.aborted).toBe(true);
  release(); expect(await opened).toBe(false);
  expect(place).not.toHaveBeenCalled(); expect(container.textContent).toBe('正在读取');
  expect(managed.managedEntries()).toEqual([]); container.remove();
});

it('应用收起全部登记只撤页面宿主,保留静态常驻容器', async () => {
  vi.resetModules();
  const managed = await import('../src/history/managed');
  const page = document.createElement('div'), resident = document.createElement('div');
  document.body.append(page, resident);
  managed.connectManagedRoutes(Promise.resolve(async () => {}));
  await managed.openManagedRoute('/', {}, { container: page, isCurrent: () => true });
  await managed.openResidentSurface('batch-dock', resident);
  expect(managed.managedEntries()).toHaveLength(2);
  managed.releaseAllManagedRoutes(); managed.releaseAllManagedRoutes();
  expect(managed.managedEntries()).toEqual([]); expect(page.children).toHaveLength(0);
  expect(resident.isConnected).toBe(true); page.remove(); resident.remove();
});