Files
lingniu-vehicle-ingest/vehicle-data-platform/apps/web/src/v2/AppV2.cache.test.tsx
2026-07-16 05:04:17 +08:00

27 lines
1.3 KiB
TypeScript

import { QueryClientProvider, useMutation } from '@tanstack/react-query';
import { cleanup, fireEvent, render, screen, waitFor } from '@testing-library/react';
import { afterEach, expect, test } from 'vitest';
import { createPlatformQueryClient } from './AppV2';
afterEach(cleanup);
test('keeps mutation feedback while mounted and releases completed writes after route unmount', async () => {
const client = createPlatformQueryClient();
const retainedPayload = { rows: Array.from({ length: 500 }, (_, index) => ({ vin: `VIN-${index}`, model: `MODEL-${index}` })) };
function MutationHarness() {
const mutation = useMutation({ mutationFn: async () => retainedPayload });
return <div><button type="button" onClick={() => mutation.mutate()}></button>{mutation.data ? <span> {mutation.data.rows.length} </span> : null}</div>;
}
const view = render(<QueryClientProvider client={client}><MutationHarness /></QueryClientProvider>);
fireEvent.click(screen.getByRole('button', { name: '执行写操作' }));
expect(await screen.findByText('已处理 500 行')).toBeInTheDocument();
expect(client.getMutationCache().getAll()).toHaveLength(1);
view.unmount();
await waitFor(() => expect(client.getMutationCache().getAll()).toHaveLength(0));
client.clear();
});