Skip to main content
Glama
test-utils.ts3.82 kB
import { vi } from "vitest"; import { logger } from "../src/lib/index.js"; // Common console mocks export const consoleErrorSpy = vi.spyOn(console, "error").mockImplementation((...args) => { // Extract the actual message from the formatted log const message = args[0]; if (typeof message === 'string' && message.includes('[ERROR]')) { // Pass through the full formatted message for error logs console.log(...args); } }); export const consoleWarnSpy = vi.spyOn(console, "warn").mockImplementation((...args) => { // Extract the actual message from the formatted log const message = args[0]; if (typeof message === 'string' && message.includes('[WARN]')) { // For test assertions, we'll match against the full formatted message console.log(...args); } }); export const consoleInfoSpy = vi.spyOn(console, "info").mockImplementation((...args) => { // Extract the actual message from the formatted log const message = args[0]; if (typeof message === 'string' && message.includes('[INFO]')) { // For test assertions, we'll match against the full formatted message console.log(...args); } }); // Logger mocks that combine with the console spies export const loggerErrorSpy = vi.spyOn(logger, "error").mockImplementation((...args) => { // Forward to console.error which is already spied on console.error(...args); }); export const loggerWarnSpy = vi.spyOn(logger, "warn").mockImplementation((...args) => { // Forward to console.warn which is already spied on console.warn(...args); }); export const loggerInfoSpy = vi.spyOn(logger, "info").mockImplementation((...args) => { // Forward to console.info which is already spied on console.info(...args); }); export const loggerDebugSpy = vi.spyOn(logger, "debug").mockImplementation((...args) => { // Just capture calls, don't forward }); // Common mock implementations export const mockPathResolution = (path: any) => ({ resolve: vi.fn().mockImplementation((...parts: string[]) => parts.join("/")), join: vi.fn().mockImplementation((...parts: string[]) => parts.join("/")), dirname: vi.fn().mockImplementation((p: string) => { const parts = p.split("/"); return parts.slice(0, -1).join("/") || "/"; }), basename: vi.fn().mockImplementation((p: string) => { const parts = p.split("/"); return parts[parts.length - 1]; }), extname: vi.fn().mockImplementation((p: string) => { const match = p.match(/\.([^.]+)$/); return match ? `.${match[1]}` : ""; }), ...path, }); // Common mock file system export const mockFileSystem = (fs: any) => ({ readFile: vi.fn().mockImplementation((path: string) => { if (path.includes("package.json")) { return Promise.resolve(JSON.stringify({ version: "1.0.0" })); } return Promise.resolve("file content"); }), readFileSync: vi.fn().mockImplementation((path: string) => { if (path.includes("package.json")) { return JSON.stringify({ version: "1.0.0" }); } return "file content"; }), ...fs, }); // Reset all mocks export const resetAllMocks = () => { consoleErrorSpy.mockClear(); consoleWarnSpy.mockClear(); consoleInfoSpy.mockClear(); loggerErrorSpy.mockClear(); loggerWarnSpy.mockClear(); loggerInfoSpy.mockClear(); loggerDebugSpy.mockClear(); vi.clearAllMocks(); }; // Common test setup export const setupTestEnvironment = () => { // Setup any global mocks or environment variables here process.env.NODE_ENV = "test"; return { // Return any cleanup functions if needed cleanup: () => { // Cleanup code if needed }, }; }; export default { consoleErrorSpy, consoleWarnSpy, consoleInfoSpy, loggerErrorSpy, loggerWarnSpy, loggerInfoSpy, loggerDebugSpy, mockPathResolution, mockFileSystem, resetAllMocks, setupTestEnvironment, };

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/maverickg59/sushimcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server