34 lines
1.4 KiB
TypeScript
34 lines
1.4 KiB
TypeScript
import { describe, expect, it, vi } from 'vitest';
|
|
|
|
describe('logger singleton', () => {
|
|
it('reuses the root logger and does not add duplicate process listeners across module reloads', async () => {
|
|
vi.resetModules();
|
|
|
|
const beforeUncaught = process.listeners('uncaughtException').length;
|
|
const beforeUnhandled = process.listeners('unhandledRejection').length;
|
|
const beforeExit = process.listeners('exit').length;
|
|
|
|
const first = await import('./logger.js');
|
|
|
|
const afterFirstUncaught = process.listeners('uncaughtException').length;
|
|
const afterFirstUnhandled = process.listeners('unhandledRejection').length;
|
|
const afterFirstExit = process.listeners('exit').length;
|
|
|
|
vi.resetModules();
|
|
|
|
const second = await import('./logger.js');
|
|
|
|
const afterSecondUncaught = process.listeners('uncaughtException').length;
|
|
const afterSecondUnhandled = process.listeners('unhandledRejection').length;
|
|
const afterSecondExit = process.listeners('exit').length;
|
|
|
|
expect(second.logger).toBe(first.logger);
|
|
expect(afterFirstUncaught).toBeGreaterThanOrEqual(beforeUncaught);
|
|
expect(afterFirstUnhandled).toBeGreaterThanOrEqual(beforeUnhandled);
|
|
expect(afterSecondUncaught).toBe(afterFirstUncaught);
|
|
expect(afterSecondUnhandled).toBe(afterFirstUnhandled);
|
|
expect(afterFirstExit).toBeGreaterThanOrEqual(beforeExit);
|
|
expect(afterSecondExit).toBe(afterFirstExit);
|
|
});
|
|
});
|