-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.test.mjs
More file actions
122 lines (109 loc) · 3.56 KB
/
index.test.mjs
File metadata and controls
122 lines (109 loc) · 3.56 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
import { jest } from '@jest/globals';
import { registerHandlers } from './index.mjs';
import defaultExport from './index.mjs';
// Jest ESM mocking
const createMockLogger = () => ({
error: jest.fn(),
warn: jest.fn(),
debug: jest.fn()
});
describe('registerHandlers (ESM)', () => {
let events;
let mockLogger;
let mockProcess;
let removeHandlers;
beforeEach(() => {
events = {};
mockLogger = createMockLogger();
mockProcess = {
on: (event, handler) => { events[event] = handler; },
off: jest.fn()
};
({ removeHandlers } = registerHandlers({ processObj: mockProcess, log: mockLogger }));
});
test('should call logger.error on uncaughtException', () => {
events.uncaughtException(new Error('fail'));
expect(mockLogger.error).toHaveBeenCalledWith('Uncaught Exception', expect.objectContaining({
name: 'Error',
message: 'fail',
stack: expect.any(String),
error: expect.any(Error)
}));
});
test('should call logger.error on unhandledRejection', () => {
const err = new Error('reason');
events.unhandledRejection(err, 'promise');
expect(mockLogger.error).toHaveBeenCalledWith('Unhandled Rejection', expect.objectContaining({
reason: expect.objectContaining({
name: 'Error',
message: 'reason',
stack: expect.any(String),
error: expect.any(Error)
}),
promise: 'promise'
}));
});
test('should call logger.warn on warning', () => {
const warning = { name: 'Warn', message: 'msg', stack: 'stack' };
events.warning(warning);
expect(mockLogger.warn).toHaveBeenCalledWith('Warning', expect.objectContaining({
name: 'Warn',
message: 'msg',
stack: 'stack',
warning
}));
});
test('should provide a removeHandlers function', () => {
expect(typeof removeHandlers).toBe('function');
});
});
describe('default export (ESM)', () => {
let events;
let mockLogger;
let mockProcess;
let removeHandlers;
beforeEach(() => {
events = {};
mockLogger = createMockLogger();
mockProcess = {
on: (event, handler) => { events[event] = handler; },
off: jest.fn()
};
({ removeHandlers } = defaultExport({ processObj: mockProcess, log: mockLogger }));
});
test('should call logger.error on uncaughtException', () => {
events.uncaughtException(new Error('fail'));
expect(mockLogger.error).toHaveBeenCalledWith('Uncaught Exception', expect.objectContaining({
name: 'Error',
message: 'fail',
stack: expect.any(String),
error: expect.any(Error)
}));
});
test('should call logger.error on unhandledRejection', () => {
const err = new Error('reason');
events.unhandledRejection(err, 'promise');
expect(mockLogger.error).toHaveBeenCalledWith('Unhandled Rejection', expect.objectContaining({
reason: expect.objectContaining({
name: 'Error',
message: 'reason',
stack: expect.any(String),
error: expect.any(Error)
}),
promise: 'promise'
}));
});
test('should call logger.warn on warning', () => {
const warning = { name: 'Warn', message: 'msg', stack: 'stack' };
events.warning(warning);
expect(mockLogger.warn).toHaveBeenCalledWith('Warning', expect.objectContaining({
name: 'Warn',
message: 'msg',
stack: 'stack',
warning
}));
});
test('should provide a removeHandlers function', () => {
expect(typeof removeHandlers).toBe('function');
});
});