MockHelpers.ts•1.95 kB
import { vi } from 'vitest';
import { createMockLogger } from './MockFactories.js';
/**
* Mocking and spying utilities for tests
* Handles test doubles, module mocking, and test isolation
*/
export class MockHelpers {
/**
* Setup common mocks for a test
*/
static setupCommonMocks() {
// Mock logger to avoid console output during tests
vi.doMock('../../src/logger/logger.js', () => ({
default: createMockLogger(),
}));
// Mock fs operations
const mockFs = {
existsSync: vi.fn(),
readFileSync: vi.fn(),
writeFileSync: vi.fn(),
mkdirSync: vi.fn(),
rmSync: vi.fn(),
};
vi.doMock('fs', () => mockFs);
return { mockFs };
}
/**
* Reset all singleton instances (common pattern in tests)
*/
static resetSingletons() {
// Reset any singleton instances that might carry state between tests
vi.clearAllMocks();
vi.resetModules();
}
/**
* Mock a module with specific implementation
*/
static mockModule(modulePath: string, mockImplementation: any): void {
vi.doMock(modulePath, () => mockImplementation);
}
/**
* Create a spy on an object method
*/
static spyOn<T extends Record<string, any>>(object: T, method: keyof T): any {
return vi.spyOn(object, method as any);
}
/**
* Create a mock HTTP request/response cycle
*/
static createHttpMockCycle() {
const req = {
params: {},
query: {},
body: {},
headers: {},
method: 'GET',
url: '/',
};
const res = {
status: vi.fn().mockReturnThis(),
json: vi.fn().mockReturnThis(),
send: vi.fn().mockReturnThis(),
redirect: vi.fn().mockReturnThis(),
cookie: vi.fn().mockReturnThis(),
clearCookie: vi.fn().mockReturnThis(),
setHeader: vi.fn().mockReturnThis(),
end: vi.fn().mockReturnThis(),
};
const next = vi.fn();
return { req, res, next };
}
}