Skip to content

Commit 0eb94b6

Browse files
authored
feat: create new prefer-mock-return-shorthand rule (#1897)
1 parent 37ad071 commit 0eb94b6

File tree

6 files changed

+560
-1
lines changed

6 files changed

+560
-1
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -374,6 +374,7 @@ Manually fixable by
374374
| [prefer-jest-mocked](docs/rules/prefer-jest-mocked.md) | Prefer `jest.mocked()` over `fn as jest.Mock` | | | 🔧 | |
375375
| [prefer-lowercase-title](docs/rules/prefer-lowercase-title.md) | Enforce lowercase test names | | | 🔧 | |
376376
| [prefer-mock-promise-shorthand](docs/rules/prefer-mock-promise-shorthand.md) | Prefer mock resolved/rejected shorthands for promises | | | 🔧 | |
377+
| [prefer-mock-return-shorthand](docs/rules/prefer-mock-return-shorthand.md) | Prefer mock return shorthands | | | 🔧 | |
377378
| [prefer-snapshot-hint](docs/rules/prefer-snapshot-hint.md) | Prefer including a hint with external snapshots | | | | |
378379
| [prefer-spy-on](docs/rules/prefer-spy-on.md) | Suggest using `jest.spyOn()` | | | 🔧 | |
379380
| [prefer-strict-equal](docs/rules/prefer-strict-equal.md) | Suggest using `toStrictEqual()` | | | | 💡 |
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
# Prefer mock return shorthands (`prefer-mock-return-shorthand`)
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+
When working with mocks of functions that return simple values, Jest provides
9+
some API sugar functions to reduce the amount of boilerplate you have to write.
10+
11+
These methods should be preferred when possible.
12+
13+
## Rule details
14+
15+
The following patterns are warnings:
16+
17+
```js
18+
jest.fn().mockImplementation(() => 'hello world');
19+
20+
jest
21+
.spyOn(fs.promises, 'readFile')
22+
.mockImplementationOnce(() => Promise.reject(new Error('oh noes!')));
23+
24+
myFunction
25+
.mockImplementationOnce(() => 42)
26+
.mockImplementationOnce(() => Promise.resolve(42))
27+
.mockReturnValue(0);
28+
```
29+
30+
The following patterns are not warnings:
31+
32+
```js
33+
jest.fn().mockResolvedValue(123);
34+
35+
jest
36+
.spyOn(fs.promises, 'readFile')
37+
.mockReturnValue(Promise.reject(new Error('oh noes!')));
38+
jest.spyOn(fs.promises, 'readFile').mockRejectedValue(new Error('oh noes!'));
39+
40+
jest.spyOn(fs, 'readFileSync').mockImplementationOnce(() => {
41+
throw new Error('oh noes!');
42+
});
43+
44+
myFunction
45+
.mockResolvedValueOnce(42)
46+
.mockResolvedValueOnce(42)
47+
.mockReturnValue(0);
48+
```

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ exports[`rules should export configs that refer to actual rules 1`] = `
6161
"jest/prefer-jest-mocked": "error",
6262
"jest/prefer-lowercase-title": "error",
6363
"jest/prefer-mock-promise-shorthand": "error",
64+
"jest/prefer-mock-return-shorthand": "error",
6465
"jest/prefer-snapshot-hint": "error",
6566
"jest/prefer-spy-on": "error",
6667
"jest/prefer-strict-equal": "error",
@@ -160,6 +161,7 @@ exports[`rules should export configs that refer to actual rules 1`] = `
160161
"jest/prefer-jest-mocked": "error",
161162
"jest/prefer-lowercase-title": "error",
162163
"jest/prefer-mock-promise-shorthand": "error",
164+
"jest/prefer-mock-return-shorthand": "error",
163165
"jest/prefer-snapshot-hint": "error",
164166
"jest/prefer-spy-on": "error",
165167
"jest/prefer-strict-equal": "error",

src/__tests__/rules.test.ts

Lines changed: 1 addition & 1 deletion
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 = 70;
5+
const numberOfRules = 71;
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)