Skip to main content
Glama
main-module.spec.ts4.54 kB
import { describe, it, beforeEach, afterEach, jest, expect } from '@jest/globals'; import * as path from 'path'; // Mock dependencies jest.mock('../../../src/stdio-server'); // Mock console.error to capture error messages const originalConsoleError = console.error; const mockConsoleError = jest.fn(); describe('Main Module Execution', () => { let mockCreateServer: jest.Mock; let mockServer: any; let originalProcessExit: any; let mockProcessExit: jest.Mock; let originalImportMeta: any; beforeEach(() => { jest.clearAllMocks(); console.error = mockConsoleError; // Create mock server mockServer = { start: jest.fn(), stop: jest.fn() }; // Create mock createServer function mockCreateServer = jest.fn().mockReturnValue(mockServer); // Mock the module in beforeEach to ensure it's available for all tests jest.doMock('../../../src/stdio-server.js', () => ({ createServer: mockCreateServer })); // Mock process.exit originalProcessExit = process.exit; mockProcessExit = jest.fn(); process.exit = mockProcessExit as any; // Store original import.meta originalImportMeta = (global as any).import; }); afterEach(() => { console.error = originalConsoleError; process.exit = originalProcessExit; (global as any).import = originalImportMeta; jest.resetModules(); }); describe('Module Exports', () => { it('should export createServer function', async () => { const mainModule = await import('../../../src/index'); expect(mainModule.createServer).toBeDefined(); expect(typeof mainModule.createServer).toBe('function'); }); }); describe('Main Module Detection', () => { it('should not execute auto-start logic when not run as main module', async () => { // Mock import.meta.url to simulate non-main module execution (global as any).import = { meta: { url: 'file://some-other-file.js' } }; // Manually mock the module by replacing the exports const originalModule = await import('../../../src/stdio-server.js'); const mockModule = { ...originalModule, createServer: mockCreateServer }; // Replace the module exports jest.doMock('../../../src/stdio-server.js', () => mockModule); // Import the main module - this should NOT trigger the auto-start logic await import('../../../src/index.js'); // Verify server was NOT created expect(mockCreateServer).not.toHaveBeenCalled(); expect(mockServer.start).not.toHaveBeenCalled(); }); }); describe('Server Creation', () => { it('should create server successfully', async () => { const { createServer } = await import('../../../src/stdio-server'); const server = createServer(); expect(mockCreateServer).toHaveBeenCalled(); expect(server).toBe(mockServer); }); it('should handle server creation errors', async () => { const creationError = new Error('Failed to create server'); mockCreateServer.mockImplementation(() => { throw creationError; }); const { createServer } = await import('../../../src/stdio-server'); expect(() => createServer()).toThrow('Failed to create server'); }); }); describe('Server Startup', () => { it('should start server successfully', async () => { mockServer.start.mockResolvedValue(undefined); const { createServer } = await import('../../../src/stdio-server'); const server = createServer(); await server.start(); expect(mockServer.start).toHaveBeenCalled(); }); it('should handle server startup errors', async () => { const startupError = new Error('Failed to start server'); mockServer.start.mockRejectedValue(startupError); const { createServer } = await import('../../../src/stdio-server'); const server = createServer(); await expect(server.start()).rejects.toThrow('Failed to start server'); }); }); });

Latest Blog Posts

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/evilpixi/pixi-midnight-mcp'

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