You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
To gauge how feasible the v5→v6 migration is and get early CI feedback before 6.0.0 final, we opened [DO NOT MERGE] draft PRs pinning ~15 real-world Pester-v5 consumer repos to 6.0.0-rc1/rc2. Each is throwaway (suggested not to merge); the goal was to surface breaks against real suites. This is the aggregated signal.
Overall: 🟢 feasible
Nearly every break is a documented change with a mechanical fix. The only undocumented behavior change found (Should -HaveCount counting dictionary entries) was caught and reverted pre-release. No undocumented break survives. One repo (maester) had a CI cancellation that is not a Pester regression (could not reproduce on rc2).
Mock fall-through removal is the dominant break (41 hits). It's the only change that needs case-by-case work; everything else is mechanical search/replace. Worth highlighting prominently in the migration guide.
The mechanical breaks (Assert-MockCalled, Assert-VerifiableMock, -ForEach @(), duplicate AfterAll) were trivial to fix and behaved exactly as documented — no surprises.
One undocumented behavior change slipped in:Should -HaveCount started counting a piped dictionary's entries instead of treating it as one object. The pilot caught it (top breakage bucket) and it was reverted before release.
maester (CC using Measure-Script #1884): rc1 CI jobs were cancelled at ~3h vs <2min on v5, which looked like a perf regression. Reproduced locally on rc2: full suite finishes in minutes, the 408-file PSScriptAnalyzer.Tests.ps1 runs 661 tests in ~6s with no super-linear discovery cost. Not a Pester regression — likely an env hang (Graph/coverage) or a kill of a queued run. Needs a maintainer re-run on rc2.
Bottom line
Migration is feasible. Breaks are documented and mostly mechanical; the single doc-gap was found and reverted. Suggested follow-ups: emphasize Mock fall-through removal in migration docs, and re-run maester on rc2 to confirm.
Why
To gauge how feasible the v5→v6 migration is and get early CI feedback before 6.0.0 final, we opened
[DO NOT MERGE]draft PRs pinning ~15 real-world Pester-v5 consumer repos to 6.0.0-rc1/rc2. Each is throwaway (suggested not to merge); the goal was to surface breaks against real suites. This is the aggregated signal.Overall: 🟢 feasible
Nearly every break is a documented change with a mechanical fix. The only undocumented behavior change found (
Should -HaveCountcounting dictionary entries) was caught and reverted pre-release. No undocumented break survives. One repo (maester) had a CI cancellation that is not a Pester regression (could not reproduce on rc2).Pilot PRs
Breaking-change tally (consumer test changes needed)
-ParameterFilterno-match throws (no fall-through to real cmd)Mock, or forward:Mock X { & (Get-Command X -CommandType Cmdlet) @PesterBoundParameters }Should -HaveCountcounts dict entriesAssert-MockCalledremovedShould -InvokeAssert-VerifiableMockremovedShould -InvokeVerifiableAfterAllthrows-ForEach $null/@()throws-AllowNullOrEmptyForEach/ guardLessons
Assert-MockCalled,Assert-VerifiableMock,-ForEach @(), duplicateAfterAll) were trivial to fix and behaved exactly as documented — no surprises.Should -HaveCountstarted counting a piped dictionary's entries instead of treating it as one object. The pilot caught it (top breakage bucket) and it was reverted before release.PSScriptAnalyzer.Tests.ps1runs 661 tests in ~6s with no super-linear discovery cost. Not a Pester regression — likely an env hang (Graph/coverage) or a kill of a queued run. Needs a maintainer re-run on rc2.Bottom line
Migration is feasible. Breaks are documented and mostly mechanical; the single doc-gap was found and reverted. Suggested follow-ups: emphasize Mock fall-through removal in migration docs, and re-run maester on rc2 to confirm.