Skip to main content
Glama
extractErrorMessage.test.ts2.75 kB
import { describe, expect, it } from 'vitest'; import { extractErrorMessage } from './extractErrorMessage'; describe('extractErrorMessage', () => { it('returns message from JSON string with message field', () => { const input = JSON.stringify({ message: 'hello world' }); expect(extractErrorMessage(input)).toBe('hello world'); }); it('returns string when JSON string is a raw string', () => { const input = JSON.stringify('just a string'); expect(extractErrorMessage(input)).toBe('just a string'); }); it('returns original string when not valid JSON', () => { const input = 'not a json'; expect(extractErrorMessage(input)).toBe('not a json'); }); it('parses Error.message when it is a JSON string with message', () => { const err = new Error(JSON.stringify({ message: 'boom' })); expect(extractErrorMessage(err)).toBe('boom'); }); it('returns Error.message when it is a plain string', () => { const err = new Error('boom msg'); expect(extractErrorMessage(err)).toBe('boom msg'); }); it('prefers object.message when object passed directly', () => { const obj = { message: 'direct message' }; expect(extractErrorMessage(obj)).toBe('direct message'); }); it('uses title and code when message is absent on object input', () => { const obj = { title: 'Error', code: 'E123' }; expect(extractErrorMessage(obj)).toBe('Error (E123)'); }); it('uses title when only title is provided on object input', () => { const obj = { title: 'Only Title' }; expect(extractErrorMessage(obj)).toBe('Only Title'); }); it('uses code when only code is provided on object input', () => { const obj = { code: 'ONLY_CODE' }; expect(extractErrorMessage(obj)).toBe('ONLY_CODE'); }); it('falls back to String(object) when object is not serializable', () => { const obj: any = {}; obj.self = obj; // circular expect(extractErrorMessage(obj)).toBe('[object Object]'); }); it('returns default message for undefined input', () => { expect(extractErrorMessage(undefined as any)).toBe( 'An unknown error occurred' ); }); it('returns default message for non-string, non-object input', () => { expect(extractErrorMessage(123 as any)).toBe('An unknown error occurred'); }); it('parses Error.message JSON with title and code but no message', () => { const err = new Error(JSON.stringify({ title: 'Title', code: 'CODE' })); expect(extractErrorMessage(err)).toBe('Title (CODE)'); }); it('parses string JSON object without message but with title/code', () => { const input = JSON.stringify({ title: 'Server Error', code: '500' }); expect(extractErrorMessage(input)).toBe('Server Error (500)'); }); });

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/aymericzip/intlayer'

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