fix: pass matcher threshold to core as saveAboveTolerance #1113
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
Fixes #1111 - When using visual matchers like
toMatchScreenSnapshot('tag', 0.9)withalwaysSaveActualImage: false, the actual image was still being saved even when the comparison passed within the threshold.Root Cause
There were two disconnected threshold systems:
images.ts): UsedsaveAboveTolerance(defaulting to 0) to decide whether to save imagesmatcher.ts): Used the user-providedexpectedthreshold to determine pass/failWhen a user set a threshold like
0.9, the core didn't know about it - it still used the default0, causing images to be saved for any non-zero mismatch.Solution
The matcher now passes the expected threshold to the core as
saveAboveTolerancein theparseMatcherParamsfunction:0(matching existing behavior)saveAboveToleranceis respected (not overridden)expect.any(Number)) cannot be converted to numeric, so default behavior is usedExample
Before (broken):
saveAboveTolerance: 0(default)0.05 > 0→ save imageexpected: 0.90.05 <= 0.9→ test passesAfter (fixed):
saveAboveTolerance: 0.9(from matcher)0.05 > 0.9= false → don't saveexpected: 0.90.05 <= 0.9→ test passesTest plan
saveAboveTolerance(no override)