webhook/node_modules/eslint-plugin-jest/docs/rules/prefer-spy-on.md

45 lines
1.4 KiB
Markdown
Raw Normal View History

# Suggest using `jest.spyOn()` (`prefer-spy-on`)
2022-11-10 11:43:16 +01:00
🔧 This rule is automatically fixable by the
[`--fix` CLI option](https://eslint.org/docs/latest/user-guide/command-line-interface#--fix).
<!-- end auto-generated rule header -->
When mocking a function by overwriting a property you have to manually restore
the original implementation when cleaning up. When using `jest.spyOn()` Jest
keeps track of changes, and they can be restored with `jest.restoreAllMocks()`,
`mockFn.mockRestore()` or by setting `restoreMocks` to `true` in the Jest
config.
Note: The mock created by `jest.spyOn()` still behaves the same as the original
function. The original function can be overwritten with
`mockFn.mockImplementation()` or by some of the
[other mock functions](https://jestjs.io/docs/en/mock-function-api).
```js
Date.now = jest.fn(); // Original behaviour lost, returns undefined
jest.spyOn(Date, 'now'); // Turned into a mock function but behaviour hasn't changed
jest.spyOn(Date, 'now').mockImplementation(() => 10); // Will always return 10
jest.spyOn(Date, 'now').mockReturnValue(10); // Will always return 10
```
## Rule details
This rule triggers a warning if an object's property is overwritten with a jest
mock.
The following patterns are considered warnings:
```js
Date.now = jest.fn();
Date.now = jest.fn(() => 10);
```
These patterns would not be considered warnings:
```js
jest.spyOn(Date, 'now');
jest.spyOn(Date, 'now').mockImplementation(() => 10);
```