Skip to content

Commit 929a164

Browse files
jacob314danzaharia1
authored andcommitted
Fix test flakes by globally mocking ink-spinner (#24044)
1 parent 96078ec commit 929a164

3 files changed

Lines changed: 27 additions & 5 deletions

File tree

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
/**
2+
* @license
3+
* Copyright 2026 Google LLC
4+
* SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
import { vi } from 'vitest';
8+
import type { SpinnerName } from 'cli-spinners';
9+
10+
export function mockInkSpinner() {
11+
vi.mock('ink-spinner', async () => {
12+
const { Text } = await import('ink');
13+
const cliSpinners = (await import('cli-spinners')).default;
14+
15+
return {
16+
default: function MockSpinner({ type = 'dots' }: { type?: SpinnerName }) {
17+
const spinner = cliSpinners[type];
18+
const frame = spinner ? spinner.frames[0] : '⠋';
19+
return <Text>{frame}</Text>;
20+
},
21+
};
22+
});
23+
}

packages/cli/src/ui/components/messages/SubagentProgressDisplay.test.tsx

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,6 @@ import { render, cleanup } from '../../../test-utils/render.js';
88
import { SubagentProgressDisplay } from './SubagentProgressDisplay.js';
99
import type { SubagentProgress } from '@google/gemini-cli-core';
1010
import { describe, it, expect, vi, afterEach } from 'vitest';
11-
import { Text } from 'ink';
12-
13-
vi.mock('ink-spinner', () => ({
14-
default: () => <Text></Text>,
15-
}));
1611

1712
describe('<SubagentProgressDisplay />', () => {
1813
afterEach(() => {

packages/cli/test-setup.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@ import { vi, beforeEach, afterEach } from 'vitest';
88
import { format } from 'node:util';
99
import { coreEvents } from '@google/gemini-cli-core';
1010
import { themeManager } from './src/ui/themes/theme-manager.js';
11+
import { mockInkSpinner } from './src/test-utils/mockSpinner.js';
12+
13+
// Globally mock ink-spinner to prevent non-deterministic snapshot/act flakes.
14+
mockInkSpinner();
1115

1216
// Unset CI environment variable so that ink renders dynamically as it does in a real terminal
1317
if (process.env.CI !== undefined) {

0 commit comments

Comments
 (0)