A snapshot test asserts that output has not changed, which is only useful if somebody reads the diff when it does.
$this->assertMatchesJsonSnapshot($response->json());
# and the failure mode:
# the test fails, the developer runs with -d
# --update-snapshots, the build goes green, and
# nobody looked at what changed.
# so: snapshots are committed, and a diff in a pull
# request needs an explicit comment about why.
The regeneration reflex is what makes snapshot suites worthless over time, and it cannot be fixed with tooling — it is a review convention. Snapshots work best for output that should genuinely be stable and human-reviewable: an API response shape, a rendered email, a generated document. They work badly for anything containing a timestamp or an id, which needs normalising first or every run is a diff.