Skip to content

Don't require a verifiable mock that an inner-scope default mock shadows#2751

Draft
nohwnd wants to merge 1 commit into
mainfrom
fix/2672-verifiable-mock-override
Draft

Don't require a verifiable mock that an inner-scope default mock shadows#2751
nohwnd wants to merge 1 commit into
mainfrom
fix/2672-verifiable-mock-override

Conversation

@nohwnd

@nohwnd nohwnd commented Jun 25, 2026

Copy link
Copy Markdown
Member

Fix #2672

A mock marked -Verifiable in an outer scope (Describe/Context) that you then override with another mock for the same command in an inner scope (It) could never pass Should -InvokeVerifiable: the inner mock handled the call, but Get-VerifiableBehaviors still collected the outer one and reported it as never invoked.

Get-VerifiableBehaviors now walks the scopes from the test outwards and drops a verifiable behavior when a closer scope has a default mock (one without a -ParameterFilter) for the same command - that default catches every call, so the outer behavior can't run and shouldn't be required. A verifiable mock that isn't shadowed like that is still required, same as before.

…t mock shadows

A mock marked -Verifiable in an outer scope that is overridden by a mock for the same
command in a narrower scope could never pass Should -InvokeVerifiable, because
Get-VerifiableBehaviors still collected the outer behavior and reported it as never
invoked even though the inner mock handled every call.

Walk the scopes from the test outwards and drop a verifiable behavior when a closer
scope has a default mock (no -ParameterFilter) for the same command. A verifiable mock
that isn't shadowed is still required.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Verifiable Mock overridden in It block causes Should -InvokeVerifiable to fail

1 participant