A no-inherit comment at the top of a folder's Pester.BeforeContainer.ps1 stops the chain there, so no setup file above that folder applies to it. Same meaning root = true has in editorconfig. New in 6.2.

A no-inherit comment at the top of a folder's Pester.BeforeContainer.ps1 stops the chain there, so no setup file above that folder applies to it. Same meaning root = true has in editorconfig. New in 6.2.
Run.Parallel needed ForEach-Object -Parallel, a PowerShell 7 cmdlet, so Windows PowerShell 5.1 ran sequentially. Pester 6.2 uses the runspace pool API both editions ship, so 5.1 runs parallel. Experimental.
BeforeAll threw and Pester blamed a break or continue statement escaping your code? In 6.1 the real exception was discarded. In 6.2 you get the error that actually threw, with the line it came from.
In 6.2 every folder down to your test file can have its own Pester.BeforeContainer.ps1, applied outermost first, so tests/unit and tests/integration each add their own setup on top of the shared root one.
In 6.2 top level code in Pester.BeforeContainer.ps1 runs during discovery only. To reach your tests it has to sit inside BeforeAll, the same rule your test files follow. Wrap a bare Import-Module or it is not there.
A dead worker in a parallel run takes its whole test file with it. Pester 6.2 checks that every file came back and fails the run, naming the one that did not. Before, the suite went green one file short.
A second BeforeAll in the same block threw in 6.1. In 6.2 a block takes as many BeforeAll and AfterAll as you want, setups running in the order you wrote them and teardowns in reverse.
Your Pester.BeforeContainer.ps1 silently not applying? In 6.1 Pester found the repo root from the process working directory, which Set-Location does not change. In 6.2 it starts from where your session is.
Run.Parallel works on Windows PowerShell 5.1, not just PowerShell 7. 5.1 is the slowest edition, so it is the one that needed it most.
Errors thrown from inside Pester used to print no location at all. A BeforeAll that failed because a database was down reported an escaped break statement instead. Both fixed. #pspester #powershell
A configuration value of the wrong type used to be ignored, so the run quietly did not do what you asked. Run.Parallel = 'yes' throws now, and a misspelled key gets a warning that names it. #pspester #powershell
Should-BeString prints a real diff now, instead of a caret under the first character that differed. It finds every region that differs and prints them with context. #pspester #powershell
Pester 6.2.0 is out. Setup files follow your folders now: every Pester.BeforeContainer.ps1 from the repo root down to the test file's own folder applies, outermost first. Unit and integration tests each get their own setup. #pspester #powershell
Call for Speakers for PSConfEU MiniCon 2026 is open on Sessionize and I've just submitted a session about Pester 6.
This is great opportunity to speak publicly, go check it out!
Pester 6 catches a classic bug: -ForEach with an empty array used to skip silently. Now it fails discovery, so tests that never ran do not look green. Opt out with -AllowNullOrEmptyForEach. #pspester #powershell
The thing I would try first in 6.2.0: every folder gets its own test setup. Pester.BeforeContainer.ps1 applies from the repo root down to the test file, so unit and integration tests stop sharing one setup at the top.
Pester 6.2.0-alpha2 is out. 6.2.0 has been feature complete for a while, so this one is almost all fixes, including importing on PowerShell 7.4.0 again. Probably the last preview before 6.2.0 ships.
Pester 6: run an assertion over every item. 1,2,3 | Should-All { $_ | Should-BeGreaterThan 0 }. A nested Should failure counts as that item failing, and Pester tells you which one. #pspester #powershell