@novo-learning/novo-sdk
Version:
SDK for the Novolanguage Speech Analysis API
55 lines (43 loc) • 1.88 kB
text/typescript
import { formatError } from './format-error';
describe('formatError', () => {
it('formats a standard Error object', () => {
const error = new Error('Something went wrong');
const output = formatError(error);
expect(output).toContain('Name: Error');
expect(output).toContain('Message: Something went wrong');
expect(output).toContain('Stacktrace:');
});
it('formats a TypeError with extra properties', () => {
const error: TypeError & { code?: number } = new TypeError('Invalid type');
error.code = 400;
const output = formatError(error);
expect(output).toContain('Name: TypeError');
expect(output).toContain('Message: Invalid type');
expect(output).toContain('code: 400');
});
it('handles AggregateError with nested errors', () => {
const error = new AggregateError([new Error('First'), new TypeError('Second')], 'Multiple errors');
const output = formatError(error);
expect(output).toContain('Name: AggregateError');
expect(output).toContain('Message: Multiple errors');
expect(output).toContain('-- Error 1 --');
expect(output).toContain('Message: First');
expect(output).toContain('-- Error 2 --');
expect(output).toContain('Message: Second');
});
it('handles non-object errors like strings', () => {
const output = formatError('Oops!');
expect(output).toBe('Unknown error: Oops!');
});
it('handles null and undefined', () => {
expect(formatError(null)).toBe('Unknown error: null');
expect(formatError(undefined)).toBe('Unknown error: undefined');
});
it('handles circular references gracefully', () => {
const error: Error & { meta?: { [key: string]: unknown } } = new Error('Circular');
error.meta = {};
error.meta.self = error;
const output = formatError(error);
expect(output).toContain('meta: unable to stringify');
});
});