27 lines
1.3 KiB
TypeScript
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();
|
|
});
|