diff --git a/frontend/src/components/AgentPanel.test.tsx b/frontend/src/components/AgentPanel.test.tsx index a388a80..bb404e1 100644 --- a/frontend/src/components/AgentPanel.test.tsx +++ b/frontend/src/components/AgentPanel.test.tsx @@ -1,4 +1,4 @@ -import { render, screen, waitFor } from "@testing-library/react"; +import { act, render, screen, waitFor } from "@testing-library/react"; import userEvent from "@testing-library/user-event"; import { afterEach, @@ -345,26 +345,32 @@ describe("AgentPanel fade-out", () => { const { container } = render(); - // Wait for the agent entry to appear - await waitFor(() => { - expect( - container.querySelector( - '[data-testid="agent-entry-73_remove_test:coder-1"]', - ), - ).toBeInTheDocument(); + // With fake timers active, waitFor's polling setInterval never fires. + // Use act to flush pending promises and React state updates instead. + await act(async () => { + await Promise.resolve(); + await Promise.resolve(); + await Promise.resolve(); + await Promise.resolve(); }); - // Advance timers by 60 seconds - vi.advanceTimersByTime(60_000); + expect( + container.querySelector( + '[data-testid="agent-entry-73_remove_test:coder-1"]', + ), + ).toBeInTheDocument(); + + // Advance fake timers by 60 seconds inside act to flush React state updates + await act(async () => { + vi.advanceTimersByTime(60_000); + }); // Entry should be removed - await waitFor(() => { - expect( - container.querySelector( - '[data-testid="agent-entry-73_remove_test:coder-1"]', - ), - ).not.toBeInTheDocument(); - }); + expect( + container.querySelector( + '[data-testid="agent-entry-73_remove_test:coder-1"]', + ), + ).not.toBeInTheDocument(); }); }); });