Version: v5

breaking-changes-in-v5

Actual breaking changes#

  • (โ— new in 5.0.1) The Parameters of Invoke-Pester changed significantly, but in 5.0.1, a compatibility parameter set was added. To allow all the v4 parameters to be used, e.g. like this Invoke-Pester -Script $testFile -PassThru -Verbose -OutputFile $tr -OutputFormat NUnitXml -CodeCoverage "$tmp/*-*.ps1" -CodeCoverageOutputFile $cc -Show All. The compatibility is not 100%, neither -Script not -CodeCoverage take hashtables, they just take a collection of paths. The -Strict parameter and -PesterOption are ignored. The -Output \ -Show parameter takes all the values, but translates only the most used options to Pester 5 compatible options, otherwise it uses Detailed output. It also allows all the Pester 5 output options, to allow you to use Diagnostic during migration. This whole Parameter set is deprecated, and prints a warning. For more options and the Advanced interface see simple and advanced interface above on how to invoke Pester.

  • PowerShell 2 is no longer supported

  • Documentation is out of date for all commands

  • Legacy syntax Should Be (without -) is removed, see Migrating from Pester v3 to v4

  • Mocks are scoped based on their placement, not in whole Describe / Context. The count also depends on their placement. See mock scoping

  • Assert-VerifiableMocks was removed, see Should -Invoke

  • All code placed in the body of Describe outside of It, BeforeAll, BeforeEach, AfterAll, AfterEach will run during discovery and it's state might or might not be available to the test code, see basics of discovery

  • -Output parameter has reduced options to None, Normal, Detailed and Diagnostic, -Show alias is removed

  • -PesterOption switch is removed

  • -TestName switch is replaced with -FullNameFilter switch

  • -Script option was renamed to -Path and takes paths only, it does not take hashtables. Parametrized scripts are not implemented at the moment, which should be solved in 5.1

  • Using $MyInvocation.MyCommand.Path to locate your script in BeforeAll does not work. This does not break it for your scripts and modules. Use $PSScriptRoot or $PSCommandPath. See importing ps files article for detailed information.

  • Should -Throw is using -like to match the exception message instead of .Contains. Use * or any of the other -like wildcard to match only part of the message.

  • Variables defined during Discovery, are not available in Before, After and It. When generating tests via foreach blocks, make sure you pass all variables into the test using -TestCases.

  • Gherkin is removed, and will later move to it's own module, please keep using Pester version 4.

  • TestDrive is defined during Run only, it cannot be used in -TestCases / -ForEach.

Deprecated features#

Additional issues to be solved in 5.1#

  • -Strict switch is not available

  • Inconclusive and Pending states are currently no longer available, -Pending and -Inconclusive are translated to -Skip both on test blocks and when using Set-ItResult

  • Code coverage report is not available.

  • Automatic Code coverage via -CI switch is largely untested.

  • Generating tests during using foreach during discovery time works mostly, generating them from BeforeAll, to postpone expensive work till it is needed in case the test is filtered out also works, but is hacky. Get in touch if you need it and help me refine it.

  • Running on huge codebases is largely untested

  • IncludeVSCodeMarker was renamed to WriteVSCodeMarker and moved to, PesterConfiguration object in Debug section. But it is not implemented and will be removed, I will detect VSCode by env variables

  • Documentation is out of date for all commands

  • Providing parameters to test scripts is not implemented, see parametric scripts

  • JUnit output is missing

  • Noticed more of them? Share please!