forked from jestjs/jest
/
detectOpenHandles.ts
123 lines (102 loc) · 3.65 KB
/
detectOpenHandles.ts
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
123
/**
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
import {wrap} from 'jest-snapshot-serializer-raw';
import {onNodeVersions} from '@jest/test-utils';
import runJest, {runContinuous} from '../runJest';
try {
require('async_hooks');
} catch (e) {
if (e.code === 'MODULE_NOT_FOUND') {
// eslint-disable-next-line jest/no-focused-tests
fit('skip test for unsupported nodes', () => {
console.warn('Skipping test for node ' + process.version);
});
} else {
throw e;
}
}
function getTextAfterTest(stderr: string) {
return (stderr.split(/Ran all test suites(.*)\n/)[2] || '').trim();
}
it('prints message about flag on slow tests', async () => {
const run = runContinuous('detect-open-handles', ['outside']);
await run.waitUntil(({stderr}) =>
stderr.includes(
'Jest did not exit one second after the test run has completed.',
),
);
const {stderr} = await run.end();
const textAfterTest = getTextAfterTest(stderr);
expect(wrap(textAfterTest)).toMatchSnapshot();
});
it('prints message about flag on forceExit', async () => {
const run = runContinuous('detect-open-handles', ['outside', '--forceExit']);
await run.waitUntil(({stderr}) => stderr.includes('Force exiting Jest'));
const {stderr} = await run.end();
const textAfterTest = getTextAfterTest(stderr);
expect(wrap(textAfterTest)).toMatchSnapshot();
});
it('prints out info about open handlers', async () => {
const run = runContinuous('detect-open-handles', [
'outside',
'--detectOpenHandles',
]);
await run.waitUntil(({stderr}) => stderr.includes('Jest has detected'));
const {stderr} = await run.end();
const textAfterTest = getTextAfterTest(stderr);
expect(wrap(textAfterTest)).toMatchSnapshot();
});
it('does not report promises', () => {
// The test here is basically that it exits cleanly without reporting anything (does not need `until`)
const {stderr} = runJest('detect-open-handles', [
'promise',
'--detectOpenHandles',
]);
const textAfterTest = getTextAfterTest(stderr);
expect(textAfterTest).toBe('');
});
it('does not report ELD histograms', () => {
const {stderr} = runJest('detect-open-handles', [
'histogram',
'--detectOpenHandles',
]);
const textAfterTest = getTextAfterTest(stderr);
expect(textAfterTest).toBe('');
});
describe('notify', () => {
it('does not report --notify flag', () => {
if (process.platform === 'win32') {
console.warn('[SKIP] Does not work on Windows');
return;
}
// The test here is basically that it exits cleanly without reporting anything (does not need `until`)
const {stderr} = runJest('detect-open-handles', ['notify', '--notify']);
const textAfterTest = getTextAfterTest(stderr);
expect(textAfterTest).toBe('');
});
});
onNodeVersions('>=11', () => {
it('does not report timeouts using unref', () => {
// The test here is basically that it exits cleanly without reporting anything (does not need `until`)
const {stderr} = runJest('detect-open-handles', [
'unref',
'--detectOpenHandles',
]);
const textAfterTest = getTextAfterTest(stderr);
expect(textAfterTest).toBe('');
});
});
it('prints out info about open handlers from inside tests', async () => {
const run = runContinuous('detect-open-handles', [
'inside',
'--detectOpenHandles',
]);
await run.waitUntil(({stderr}) => stderr.includes('Jest has detected'));
const {stderr} = await run.end();
const textAfterTest = getTextAfterTest(stderr);
expect(wrap(textAfterTest)).toMatchSnapshot();
});