import { LazyLogger } from '../../../src/logging/LazyLogger'; import { LazyLoggerFactory } from '../../../src/logging/LazyLoggerFactory'; describe('LazyLogger', (): void => { let lazyLoggerFactory: LazyLoggerFactory; let logger: LazyLogger; beforeEach(async(): Promise => { lazyLoggerFactory = LazyLoggerFactory.getInstance(); lazyLoggerFactory.resetLoggerFactory(); logger = new LazyLogger(lazyLoggerFactory, 'MyLabel'); }); it('throws when no logger factory is set in the lazy logger factory.', async(): Promise => { expect((): any => logger.log('debug', 'my message', { abc: true })) .toThrow('No logger factory has been set. Can be caused by logger invocation during initialization.'); }); it('creates a new logger using the factory.', async(): Promise => { const dummyLogger: any = { log: jest.fn((): any => dummyLogger), }; const dummyLoggerFactory: any = { createLogger: jest.fn((): any => dummyLogger), }; lazyLoggerFactory.loggerFactory = dummyLoggerFactory; expect(logger.log('debug', 'my message')).toBe(dummyLogger); expect(dummyLoggerFactory.createLogger).toHaveBeenCalledTimes(1); expect(dummyLoggerFactory.createLogger).toHaveBeenCalledWith('MyLabel'); expect(dummyLogger.log).toHaveBeenCalledTimes(1); expect(dummyLogger.log).toHaveBeenCalledWith('debug', 'my message'); }); it('reuses the logger for repeated calls.', async(): Promise => { const dummyLogger: any = { log: jest.fn((): any => dummyLogger), }; const dummyLoggerFactory: any = { createLogger: jest.fn((): any => dummyLogger), }; lazyLoggerFactory.loggerFactory = dummyLoggerFactory; expect(logger.log('debug', 'my message 1')).toBe(dummyLogger); expect(logger.log('debug', 'my message 2')).toBe(dummyLogger); expect(logger.log('debug', 'my message 3')).toBe(dummyLogger); expect(dummyLoggerFactory.createLogger).toHaveBeenCalledTimes(1); expect(dummyLoggerFactory.createLogger).toHaveBeenCalledWith('MyLabel'); expect(dummyLogger.log).toHaveBeenCalledTimes(3); expect(dummyLogger.log).toHaveBeenNthCalledWith(1, 'debug', 'my message 1'); expect(dummyLogger.log).toHaveBeenNthCalledWith(2, 'debug', 'my message 2'); expect(dummyLogger.log).toHaveBeenNthCalledWith(3, 'debug', 'my message 3'); }); });