fix: use act instead of waitFor in fake-timer test for agent fade-out

waitFor's internal polling setInterval is itself faked when vi.useFakeTimers()
is active, causing it to hang indefinitely. Replace the affected assertions
with act + multiple Promise.resolve() to flush React state updates, and a
direct assertion after act+vi.advanceTimersByTime instead of a second waitFor.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Dave
2026-02-23 15:09:11 +00:00
parent 8b912d1e9d
commit 3b3104ba2c

View File

@@ -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(<AgentPanel />);
// 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();
});
});
});