Files
NianToB/tests/setup.ts

101 lines
2.5 KiB
TypeScript

/**
* Vitest Test Setup
* Global test configuration and mocks
*/
import { vi } from 'vitest';
import '@testing-library/jest-dom';
// Provide a minimal `electron` mock so tests that transitively import
// main-process code (logger, store, etc.) don't blow up when the Electron
// binary is not present (e.g. CI with ELECTRON_SKIP_BINARY_DOWNLOAD=1).
// Individual test files can override with their own vi.mock('electron', ...).
vi.mock('electron', () => ({
app: {
getPath: vi.fn().mockReturnValue('/tmp/clawx-test'),
getVersion: vi.fn().mockReturnValue('0.0.0-test'),
getName: vi.fn().mockReturnValue('clawx-test'),
isPackaged: false,
isReady: vi.fn().mockResolvedValue(true),
on: vi.fn(),
off: vi.fn(),
quit: vi.fn(),
whenReady: vi.fn().mockResolvedValue(undefined),
},
BrowserWindow: vi.fn(),
ipcMain: { on: vi.fn(), handle: vi.fn(), removeHandler: vi.fn() },
dialog: { showOpenDialog: vi.fn(), showMessageBox: vi.fn() },
shell: { openExternal: vi.fn() },
session: { defaultSession: { webRequest: { onBeforeSendHeaders: vi.fn() } } },
utilityProcess: {},
}));
// Mock window.electron API
const mockElectron = {
ipcRenderer: {
invoke: vi.fn(),
on: vi.fn(),
once: vi.fn(),
off: vi.fn(),
},
openExternal: vi.fn(),
platform: 'darwin',
isDev: true,
};
const mockYinian = {
auth: {
createImageCaptcha: vi.fn(),
restoreSession: vi.fn(),
getSessionState: vi.fn(),
loginWithSms: vi.fn(),
loginWithPassword: vi.fn(),
logout: vi.fn(),
getSavedCredentials: vi.fn(),
saveCredentials: vi.fn(),
clearSavedCredentials: vi.fn(),
},
app: {
getServerStatus: vi.fn(),
getConfig: vi.fn(),
switchHotel: vi.fn(),
},
skills: {
sync: vi.fn(),
listLocal: vi.fn(),
getRegistry: vi.fn(),
},
};
if (typeof window !== 'undefined') {
Object.defineProperty(window, 'electron', {
value: mockElectron,
writable: true,
});
Object.defineProperty(window, 'yinian', {
value: mockYinian,
writable: true,
});
}
// Mock matchMedia
if (typeof window !== 'undefined') {
Object.defineProperty(window, 'matchMedia', {
writable: true,
value: vi.fn().mockImplementation((query) => ({
matches: false,
media: query,
onchange: null,
addListener: vi.fn(),
removeListener: vi.fn(),
addEventListener: vi.fn(),
removeEventListener: vi.fn(),
dispatchEvent: vi.fn(),
})),
});
}
// Reset mocks after each test
afterEach(() => {
vi.clearAllMocks();
});