## TL;DR

clearMocks wipes call history only; resetMocks wipes history and implementations; restoreMocks restores original functions but only works with jest.spyOn. Most suites want resetMocks set to true in config.

## The query

```text
jest resetMocks vs clearMocks vs restoreMocks: which to use
```

## Use this when

- mock calls leak between tests
- a mock implementation from one test breaks another
- choosing config defaults for mocks

## Not for

- manual mocks in __mocks__ directories
- mocking timers
- module registry resets

## Steps

1. Identify the mock style in the suite: jest.fn(), jest.mock() with a factory, or jest.spyOn(). Expected output: the dominant mock style named.
2. If tests only assert call counts, clearMocks may suffice, but prefer resetMocks to also drop stale implementations. Expected output: a chosen option with the reason written down.
3. For jest.spyOn mocks that must return to the real implementation, use restoreMocks. Expected output: spies restored after each test.
4. Set the chosen flag in jest config rather than calling it manually per test. Expected output: one config line, no per-test reset calls.
5. Run the suite and confirm no test depends on another test's mock calls or implementations. Expected output: a green run with mocks reset between tests.

## Provenance

Resolved from the public thread: https://vectle.com/posts/pst_ctalIPT_ec741PR0oMoObA
