Skip to content

Commit 4bf3aa1

Browse files
committed
Initial demo
1 parent aacefdd commit 4bf3aa1

31 files changed

+5448
-1
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
node_modules

README.md

Lines changed: 112 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,112 @@
1-
# jest-angular-memory-leak-example
1+
# jest-angular-memory-leak-example
2+
3+
# Simple zone.js + jsdom memory leak example
4+
5+
This repo was created for https://github.com/angular/angular/issues/24048 investigation
6+
7+
8+
9+
10+
11+
12+
13+
## Run `npm install` firstly
14+
15+
## Run `npm test`
16+
17+
```
18+
> jest --runInBand --logHeapUsage
19+
20+
PASS __tests__/test10.spec.js (48 MB heap size)
21+
PASS __tests__/test19.spec.js (48 MB heap size)
22+
PASS __tests__/test11.spec.js (50 MB heap size)
23+
PASS __tests__/test14.spec.js (50 MB heap size)
24+
PASS __tests__/test20.spec.js (51 MB heap size)
25+
PASS __tests__/test25.spec.js (64 MB heap size)
26+
PASS __tests__/test12.spec.js (64 MB heap size)
27+
PASS __tests__/test16.spec.js (64 MB heap size)
28+
PASS __tests__/test8.spec.js (65 MB heap size)
29+
PASS __tests__/test13.spec.js (78 MB heap size)
30+
PASS __tests__/test18.spec.js (78 MB heap size)
31+
PASS __tests__/test15.spec.js (79 MB heap size)
32+
PASS __tests__/test17.spec.js (79 MB heap size)
33+
PASS __tests__/test1.spec.js (80 MB heap size)
34+
PASS __tests__/test2.spec.js (93 MB heap size)
35+
PASS __tests__/test4.spec.js (93 MB heap size)
36+
PASS __tests__/test3.spec.js (93 MB heap size)
37+
PASS __tests__/test7.spec.js (94 MB heap size)
38+
PASS __tests__/test24.spec.js (107 MB heap size)
39+
PASS __tests__/test6.spec.js (107 MB heap size)
40+
PASS __tests__/test21.spec.js (107 MB heap size)
41+
PASS __tests__/test23.spec.js (108 MB heap size)
42+
PASS __tests__/test9.spec.js (120 MB heap size)
43+
PASS __tests__/test5.spec.js (120 MB heap size)
44+
PASS __tests__/test22.spec.js (120 MB heap size)
45+
46+
Test Suites: 25 passed, 25 total
47+
Tests: 25 passed, 25 total
48+
Snapshots: 0 total
49+
Time: 2.198s
50+
Ran all test suites.
51+
52+
```
53+
54+
As you can see there is steady heap usage increase
55+
56+
## Run `npm test -- --detectLeaks`
57+
58+
```
59+
● Test suite failed to run
60+
61+
EXPERIMENTAL FEATURE!
62+
Your test suite is leaking memory. Please ensure all references are cleaned.
63+
64+
There is a number of things that can leak memory:
65+
- Async operations that have not finished (e.g. fs.readFile).
66+
- Timers not properly mocked (e.g. setInterval, setTimeout).
67+
- Keeping references to the global scope.
68+
69+
at node_modules/jest/node_modules/jest-cli/build/test_scheduler.js:264:22
70+
```
71+
72+
As you can see jest reports memory leaks
73+
74+
## Comment/remove `require('zone.js/dist/zone.js');` in `setupJest.js` and run `npm test`
75+
76+
```
77+
> jest --runInBand --logHeapUsage
78+
79+
PASS __tests__/test10.spec.js (39 MB heap size)
80+
PASS __tests__/test12.spec.js (47 MB heap size)
81+
PASS __tests__/test14.spec.js (43 MB heap size)
82+
PASS __tests__/test13.spec.js (51 MB heap size)
83+
PASS __tests__/test11.spec.js (47 MB heap size)
84+
PASS __tests__/test17.spec.js (54 MB heap size)
85+
PASS __tests__/test16.spec.js (39 MB heap size)
86+
PASS __tests__/test20.spec.js (47 MB heap size)
87+
PASS __tests__/test19.spec.js (42 MB heap size)
88+
PASS __tests__/test25.spec.js (49 MB heap size)
89+
PASS __tests__/test5.spec.js (45 MB heap size)
90+
PASS __tests__/test7.spec.js (53 MB heap size)
91+
PASS __tests__/test21.spec.js (49 MB heap size)
92+
PASS __tests__/test9.spec.js (56 MB heap size)
93+
PASS __tests__/test22.spec.js (52 MB heap size)
94+
PASS __tests__/test18.spec.js (59 MB heap size)
95+
PASS __tests__/test4.spec.js (55 MB heap size)
96+
PASS __tests__/test8.spec.js (63 MB heap size)
97+
PASS __tests__/test2.spec.js (58 MB heap size)
98+
PASS __tests__/test24.spec.js (66 MB heap size)
99+
PASS __tests__/test6.spec.js (62 MB heap size)
100+
PASS __tests__/test23.spec.js (69 MB heap size)
101+
PASS __tests__/test1.spec.js (65 MB heap size)
102+
PASS __tests__/test15.spec.js (39 MB heap size)
103+
PASS __tests__/test3.spec.js (47 MB heap size)
104+
105+
Test Suites: 25 passed, 25 total
106+
Tests: 25 passed, 25 total
107+
Snapshots: 0 total
108+
Time: 1.636s, estimated 2s
109+
Ran all test suites.
110+
```
111+
112+
As you can see there is NO steady heap usage increase

__tests__/test1.spec.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
describe('describe', () => {
2+
test('test', () => {
3+
expect(true).toBe(true);
4+
});
5+
});

__tests__/test10.spec.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
describe('describe', () => {
2+
test('test', () => {
3+
expect(true).toBe(true);
4+
});
5+
});

__tests__/test11.spec.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
describe('describe', () => {
2+
test('test', () => {
3+
expect(true).toBe(true);
4+
});
5+
});

__tests__/test12.spec.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
describe('describe', () => {
2+
test('test', () => {
3+
expect(true).toBe(true);
4+
});
5+
});

__tests__/test13.spec.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
describe('describe', () => {
2+
test('test', () => {
3+
expect(true).toBe(true);
4+
});
5+
});

__tests__/test14.spec.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
describe('describe', () => {
2+
test('test', () => {
3+
expect(true).toBe(true);
4+
});
5+
});

__tests__/test15.spec.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
describe('describe', () => {
2+
test('test', () => {
3+
expect(true).toBe(true);
4+
});
5+
});

__tests__/test16.spec.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
describe('describe', () => {
2+
test('test', () => {
3+
expect(true).toBe(true);
4+
});
5+
});

__tests__/test17.spec.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
describe('describe', () => {
2+
test('test', () => {
3+
expect(true).toBe(true);
4+
});
5+
});

__tests__/test18.spec.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
describe('describe', () => {
2+
test('test', () => {
3+
expect(true).toBe(true);
4+
});
5+
});

__tests__/test19.spec.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
describe('describe', () => {
2+
test('test', () => {
3+
expect(true).toBe(true);
4+
});
5+
});

__tests__/test2.spec.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
describe('describe', () => {
2+
test('test', () => {
3+
expect(true).toBe(true);
4+
});
5+
});

__tests__/test20.spec.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
describe('describe', () => {
2+
test('test', () => {
3+
expect(true).toBe(true);
4+
});
5+
});

__tests__/test21.spec.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
describe('describe', () => {
2+
test('test', () => {
3+
expect(true).toBe(true);
4+
});
5+
});

__tests__/test22.spec.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
describe('describe', () => {
2+
test('test', () => {
3+
expect(true).toBe(true);
4+
});
5+
});

__tests__/test23.spec.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
describe('describe', () => {
2+
test('test', () => {
3+
expect(true).toBe(true);
4+
});
5+
});

__tests__/test24.spec.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
describe('describe', () => {
2+
test('test', () => {
3+
expect(true).toBe(true);
4+
});
5+
});

__tests__/test25.spec.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
describe('describe', () => {
2+
test('test', () => {
3+
expect(true).toBe(true);
4+
});
5+
});

__tests__/test3.spec.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
describe('describe', () => {
2+
test('test', () => {
3+
expect(true).toBe(true);
4+
});
5+
});

__tests__/test4.spec.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
describe('describe', () => {
2+
test('test', () => {
3+
expect(true).toBe(true);
4+
});
5+
});

__tests__/test5.spec.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
describe('describe', () => {
2+
test('test', () => {
3+
expect(true).toBe(true);
4+
});
5+
});

__tests__/test6.spec.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
describe('describe', () => {
2+
test('test', () => {
3+
expect(true).toBe(true);
4+
});
5+
});

__tests__/test7.spec.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
describe('describe', () => {
2+
test('test', () => {
3+
expect(true).toBe(true);
4+
});
5+
});

__tests__/test8.spec.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
describe('describe', () => {
2+
test('test', () => {
3+
expect(true).toBe(true);
4+
});
5+
});

__tests__/test9.spec.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
describe('describe', () => {
2+
test('test', () => {
3+
expect(true).toBe(true);
4+
});
5+
});

jest.config.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
module.exports = {
2+
setupTestFrameworkScriptFile: require.resolve('./setupJest'),
3+
};

0 commit comments

Comments
 (0)