Skip to content

Commit 37478d8

Browse files
MadeinFranceG-Rath
andauthored
feat: add prefer-importing-jest-globals rule (#1490)
* feat: prefer importing jest globals [new rule] - Fix #1101 Issue: #1101 * test(prefer-importing-jest-globals): use `FlatCompatRuleTester` * test(prefer-importing-jest-globals): clean up tests * test(prefer-importing-jest-globals): explicitly set the source type to `script` * fix(prefer-importing-jest-globals): remove unneeded properties from rule config * fix(prefer-importing-jest-globals): support template literals * refactor(prefer-importing-jest-globals): use accessor utilities and optional chaining * refactor(prefer-importing-jest-globals): remove unneeded code * refactor(prefer-importing-jest-globals): use a Set --------- Co-authored-by: Gareth Jones <[email protected]>
1 parent 9aa7aee commit 37478d8

6 files changed

+718
-1
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -328,6 +328,7 @@ set to warn in.\
328328
| [prefer-expect-resolves](docs/rules/prefer-expect-resolves.md) | Prefer `await expect(...).resolves` over `expect(await ...)` syntax | | | 🔧 | |
329329
| [prefer-hooks-in-order](docs/rules/prefer-hooks-in-order.md) | Prefer having hooks in a consistent order | | | | |
330330
| [prefer-hooks-on-top](docs/rules/prefer-hooks-on-top.md) | Suggest having hooks before any test cases | | | | |
331+
| [prefer-importing-jest-globals](docs/rules/prefer-importing-jest-globals.md) | Prefer importing Jest globals | | | 🔧 | |
331332
| [prefer-lowercase-title](docs/rules/prefer-lowercase-title.md) | Enforce lowercase test names | | | 🔧 | |
332333
| [prefer-mock-promise-shorthand](docs/rules/prefer-mock-promise-shorthand.md) | Prefer mock resolved/rejected shorthands for promises | | | 🔧 | |
333334
| [prefer-snapshot-hint](docs/rules/prefer-snapshot-hint.md) | Prefer including a hint with external snapshots | | | | |
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
# Prefer importing Jest globals (`prefer-importing-jest-globals`)
2+
3+
🔧 This rule is automatically fixable by the
4+
[`--fix` CLI option](https://eslint.org/docs/latest/user-guide/command-line-interface#--fix).
5+
6+
<!-- end auto-generated rule header -->
7+
8+
This rule aims to enforce explicit imports from `@jest/globals`.
9+
10+
1. This is useful for ensuring that the Jest APIs are imported the same way in
11+
the codebase.
12+
2. When you can't modify Jest's
13+
[`injectGlobals`](https://jestjs.io/docs/configuration#injectglobals-boolean)
14+
configuration property, this rule can help to ensure that the Jest globals
15+
are imported explicitly and facilitate a migration to `@jest/globals`.
16+
17+
## Rule details
18+
19+
Examples of **incorrect** code for this rule
20+
21+
```js
22+
/* eslint jest/prefer-importing-jest-globals: "error" */
23+
24+
describe('foo', () => {
25+
it('accepts this input', () => {
26+
// ...
27+
});
28+
});
29+
```
30+
31+
Examples of **correct** code for this rule
32+
33+
```js
34+
/* eslint jest/prefer-importing-jest-globals: "error" */
35+
36+
import { describe, it } from '@jest/globals';
37+
38+
describe('foo', () => {
39+
it('accepts this input', () => {
40+
// ...
41+
});
42+
});
43+
```
44+
45+
## Further Reading
46+
47+
- [Documentation](https://jestjs.io/docs/api)

src/__tests__/__snapshots__/rules.test.ts.snap

+2
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ exports[`rules should export configs that refer to actual rules 1`] = `
4545
"jest/prefer-expect-resolves": "error",
4646
"jest/prefer-hooks-in-order": "error",
4747
"jest/prefer-hooks-on-top": "error",
48+
"jest/prefer-importing-jest-globals": "error",
4849
"jest/prefer-lowercase-title": "error",
4950
"jest/prefer-mock-promise-shorthand": "error",
5051
"jest/prefer-snapshot-hint": "error",
@@ -126,6 +127,7 @@ exports[`rules should export configs that refer to actual rules 1`] = `
126127
"jest/prefer-expect-resolves": "error",
127128
"jest/prefer-hooks-in-order": "error",
128129
"jest/prefer-hooks-on-top": "error",
130+
"jest/prefer-importing-jest-globals": "error",
129131
"jest/prefer-lowercase-title": "error",
130132
"jest/prefer-mock-promise-shorthand": "error",
131133
"jest/prefer-snapshot-hint": "error",

src/__tests__/rules.test.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { existsSync } from 'fs';
22
import { resolve } from 'path';
33
import plugin from '../';
44

5-
const numberOfRules = 52;
5+
const numberOfRules = 53;
66
const ruleNames = Object.keys(plugin.rules);
77
const deprecatedRules = Object.entries(plugin.rules)
88
.filter(([, rule]) => rule.meta.deprecated)

0 commit comments

Comments
 (0)