Skip to content

Commit 9a735f9

Browse files
authored
feat: allow configuring destroyAfterEach for setup test env (#1469)
Closes #1466
1 parent b4e3b6d commit 9a735f9

File tree

7 files changed

+53
-5
lines changed

7 files changed

+53
-5
lines changed

.eslintrc.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ module.exports = {
44
es6: true,
55
'jest/globals': true,
66
},
7+
globals: {
8+
globalThis: false,
9+
},
710
parserOptions: {
811
ecmaVersion: 2020,
912
sourceType: 'module',

setup-jest.js

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,17 @@
11
require('zone.js/bundles/zone-testing-bundle.umd');
2-
32
const { getTestBed } = require('@angular/core/testing');
43
const {
54
BrowserDynamicTestingModule,
65
platformBrowserDynamicTesting,
76
} = require('@angular/platform-browser-dynamic/testing');
87

9-
getTestBed().initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting());
8+
const configuredDestroyAfterEach = globalThis.ngJest?.destroyAfterEach;
9+
if (configuredDestroyAfterEach !== undefined) {
10+
getTestBed().initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting(), {
11+
teardown: {
12+
destroyAfterEach: configuredDestroyAfterEach,
13+
},
14+
});
15+
} else {
16+
getTestBed().initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting());
17+
}

setup-jest.mjs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,13 @@ import 'zone.js/fesm2015/zone-testing-bundle.min.js';
22
import { getTestBed } from '@angular/core/testing';
33
import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from '@angular/platform-browser-dynamic/testing';
44

5-
getTestBed().initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting());
5+
const configuredDestroyAfterEach = globalThis.ngJest?.destroyAfterEach;
6+
if (configuredDestroyAfterEach !== undefined) {
7+
getTestBed().initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting(), {
8+
teardown: {
9+
destroyAfterEach: configuredDestroyAfterEach,
10+
},
11+
});
12+
} else {
13+
getTestBed().initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting());
14+
}

src/config/setup-jest.spec.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,20 +46,30 @@ describe('setup-jest', () => {
4646
};
4747

4848
beforeEach(() => {
49+
delete globalThis.ngJest;
4950
jest.clearAllMocks();
5051
});
5152

5253
test('should initialize test environment with getTestBed() and initTestEnvironment() for CJS setup-jest', async () => {
54+
globalThis.ngJest = {
55+
destroyAfterEach: true,
56+
};
5357
await import('../../setup-jest');
5458

5559
expect(mockUmdZoneJs).toHaveBeenCalled();
5660
assertOnInitTestEnv();
61+
expect(mockInitTestEnvironment.mock.calls[0][2]).toEqual({
62+
teardown: {
63+
destroyAfterEach: true,
64+
},
65+
});
5766
});
5867

5968
test('should initialize test environment with getTestBed() and initTestEnvironment() for ESM setup-jest', async () => {
6069
await import('../../setup-jest.mjs');
6170

6271
expect(mockEsmZoneJs).toHaveBeenCalled();
6372
assertOnInitTestEnv();
73+
expect(mockInitTestEnvironment.mock.calls[0][2]).toBeUndefined();
6474
});
6575
});

src/global.d.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ declare global {
44
var ngJest: {
55
skipNgcc?: boolean;
66
tsconfig?: string;
7-
};
7+
destroyAfterEach?: boolean;
8+
} | undefined;
89
}
910

1011
export {}

tsconfig.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,6 @@
1717
"module": "CommonJS",
1818
"lib": ["esnext", "dom"],
1919
"types": ["node", "jest"]
20-
}
20+
},
21+
"files": ["src/global.d.ts"]
2122
}

website/docs/getting-started/test-environment.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,19 @@ we also make sure Jest test methods run in Zone context. Then we initialize the
99

1010
While `setup-jest.js` above is for running Jest with **CommonJS** mode, we also provide [`setup-jest.mjs`](https://github.com/thymikee/jest-preset-angular/blob/main/setup-jest.mjs)
1111
to run with **ESM** mode.
12+
13+
### Configure test environment
14+
15+
When creating Angular test environment with `TestBed`, it is possible to specify the behavior of `teardown` via `globalThis` in the Jest setup file.
16+
For example:
17+
18+
```ts
19+
// setup-test.ts
20+
globalThis.ngJest = {
21+
destroyAfterEach: true,
22+
};
23+
24+
import 'jest-preset-angular/setup-jest';
25+
```
26+
27+
`jest-preset-angular` will look at `globalThis.ngJest` and pass the correct `destroyAfterEach` to `TestBed`.

0 commit comments

Comments
 (0)