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
|
import { LogLevel, LogTrace, type ILogger } from '../lib/index';
describe('trace/log/trace (LogTrace)', () => {
beforeEach(() => {
jest.useFakeTimers();
jest.setSystemTime(new Date('2020-01-01T00:00:00.000Z'));
});
afterEach(() => {
jest.useRealTimers();
});
test('uses defaultLevel when no explicit level', () => {
const logger: ILogger = { log: jest.fn() };
const allowed = () => new Set([LogLevel.UNKNOWN, LogLevel.WARN]);
const trace = new LogTrace(logger, [], LogLevel.WARN, allowed);
trace.trace('hello');
expect(logger.log).toHaveBeenCalledTimes(1);
const [level, ...rest] = (logger.log as jest.Mock).mock.calls[0];
expect(level).toBe(LogLevel.WARN);
expect(rest.join(' ')).toContain('hello');
});
test('picks highest log level across traces', () => {
const logger: ILogger = { log: jest.fn() };
const allowed = () => new Set([LogLevel.UNKNOWN, LogLevel.INFO, LogLevel.WARN, LogLevel.ERROR]);
const trace = new LogTrace(logger, [], LogLevel.INFO, allowed);
trace.traceScope(LogLevel.INFO).traceScope(LogLevel.ERROR).trace('boom');
const [level] = (logger.log as jest.Mock).mock.calls[0];
expect(level).toBe(LogLevel.ERROR);
});
test('filters disallowed levels', () => {
const logger: ILogger = { log: jest.fn() };
const allowed = () => new Set([LogLevel.UNKNOWN, LogLevel.INFO]);
const trace = new LogTrace(logger, [], LogLevel.INFO, allowed);
trace.traceScope(LogLevel.DEBUG).trace('nope');
expect(logger.log).not.toHaveBeenCalled();
});
test('formats Error objects in trace', () => {
const logger: ILogger = { log: jest.fn() };
const allowed = () => new Set([LogLevel.UNKNOWN, LogLevel.ERROR]);
const trace = new LogTrace(logger, [], LogLevel.INFO, allowed);
trace.traceScope(LogLevel.ERROR).trace(new Error('boom'));
const [_level, msg] = (logger.log as jest.Mock).mock.calls[0];
expect(msg).toContain('TracedException.Name = Error');
expect(msg).toContain('TracedException.Message = boom');
});
});
|