Skip to content

when renaming an "it" block or "describe" block, remove obsolete snapshots in watch mode #10699

Closed
@capaj

Description

@capaj

🚀 Feature Proposal

when a change in the name of "it" block or "describe" block occurs currently there is a new snapshot written in the watch mode. Old ones remain there.
I would like it if they were automatically removed at the end of the run. Jest prints out a warning anyway like this:
image
I would like it if jest removed the snapshots automatically when the number of newly created snapshots matches the number of created ones.
Yes this can potentially be dangerous, but in 99% of cases it is just a rename of a block. Also we can probably do additional check to see if this indeed was just a snapshot rename or not by inspecting the name of obsolete snapshots.
If a describe block changed, the ending of the name of the snapshot will match to the one removed.
If a it block changed name, the beginning of the name of the snapshot will match to the one removed.
This logic should also work for nested describes-basically when a new snapshot export name still partially matches the old one.
If a user renames both blocks at once we can keep the old behavior as we wouldn't be able to match any parts.

Motivation

some test runs might take a while and it is tedious to keep rerunning them twice every time I want to change a name of a single block.

Example

I have a file like this:

describe('A', () => {
  it('B', async () => {
    expect(1).toMatchSnapshot()
  })
})

and a snapshot:

exports[`A B 1`] = `1`;

When I change the "B" to "C" in watch mode, I get this in my snapshot file:

exports[`A B 1`] = `1`;

exports[`A C 1`] = `1`;

This proposal is about changing this output to be just:

exports[`A C 1`] = `1`;

Pitch

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions