Skip to content

Commit c5e73e8

Browse files
committed
Fix jest config
1 parent 39d8b82 commit c5e73e8

2 files changed

Lines changed: 29 additions & 0 deletions

File tree

jest.config.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,6 @@ module.exports = {
66
testTimeout: 15000,
77
verbose: true,
88
silent: true,
9+
setupFilesAfterEnv: ['<rootDir>/src/__tests__/setup.ts'],
10+
forceExit: true,
911
};

src/__tests__/setup.ts

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
// oclif registers listeners on process streams at module load time. Since Jest
2+
// re-initialises modules per test file (even with -i), listeners accumulate
3+
// across suites and exceed Node's default limit of 10.
4+
//
5+
// Top-level code here runs before the test file's imports, so we snapshot
6+
// the current listeners now and restore after each suite in afterAll.
7+
const EVENTS = ['error', 'resize', 'close', 'finish', 'drain'];
8+
const streams = [process.stdout, process.stderr, process.stdin] as const;
9+
10+
const snapshots = new Map(
11+
streams.map((stream) => [
12+
stream,
13+
new Map(EVENTS.map((event) => [event, [...(stream as NodeJS.EventEmitter).listeners(event)]])),
14+
]),
15+
);
16+
17+
afterAll(() => {
18+
for (const [stream, snapshot] of snapshots) {
19+
for (const [event, saved] of snapshot) {
20+
for (const listener of (stream as NodeJS.EventEmitter).listeners(event)) {
21+
if (!saved.includes(listener)) {
22+
(stream as NodeJS.EventEmitter).removeListener(event, listener as (...args: unknown[]) => void);
23+
}
24+
}
25+
}
26+
}
27+
});

0 commit comments

Comments
 (0)