Skip to content

Commit 3c55b15

Browse files
authored
[menubar] Make touch-click cooldown test deterministic with fake timers (#5393)
1 parent db86f44 commit 3c55b15

1 file changed

Lines changed: 22 additions & 10 deletions

File tree

packages/react/src/menubar/Menubar.test.tsx

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -52,18 +52,30 @@ describe('<Menubar />', () => {
5252
await screen.findByTestId('file-menu');
5353

5454
const editTrigger = screen.getByTestId('edit-trigger');
55-
await act(async () => {
56-
editTrigger.focus();
57-
});
58-
await screen.findByTestId('edit-menu');
5955

60-
fireEvent(
61-
editTrigger,
62-
new PointerEvent('click', { bubbles: true, cancelable: true, pointerType: 'touch' }),
63-
);
64-
expect(screen.queryByTestId('edit-menu')).not.toBe(null);
56+
// The focus-open below starts a 300ms wall-clock cooldown during which touch clicks
57+
// are ignored. Freeze timers so the cooldown cannot expire before the first click
58+
// on a loaded machine, and advance past its expiry explicitly.
59+
vi.useFakeTimers();
60+
try {
61+
await act(async () => {
62+
editTrigger.focus();
63+
});
64+
screen.getByTestId('edit-menu');
65+
66+
fireEvent(
67+
editTrigger,
68+
new PointerEvent('click', { bubbles: true, cancelable: true, pointerType: 'touch' }),
69+
);
70+
expect(screen.queryByTestId('edit-menu')).not.toBe(null);
71+
72+
await act(async () => {
73+
vi.advanceTimersByTime(310);
74+
});
75+
} finally {
76+
vi.useRealTimers();
77+
}
6578

66-
await wait(310);
6779
fireEvent(
6880
editTrigger,
6981
new PointerEvent('click', { bubbles: true, cancelable: true, pointerType: 'touch' }),

0 commit comments

Comments
 (0)