Pester Versions Save

Pester is the ubiquitous test and mock framework for PowerShell.

5.6.0-beta1

3 weeks ago

What's Changed

Inconclusive is back!

Should -HaveParameter regression is fixed.

And more:

New Contributors

And also a bit thank you to @fflaten!

Contrary to my tweet, we won't remove support for 3, 4, and 6.2 in Pester 5, the PR was added and then reverted. Will keep that change for Pester 6.

Error on update:

My certificate was renewed, and you will get error on update, because the Issuer changed. And there is no way to get valid certificate from the previous issuer. It is still signed by me, but don't take my word for it, go check the certificate.

image

Full Changelog: https://github.com/pester/Pester/compare/5.5.0...5.6.0-beta1

5.5.0

10 months ago

What's Changed

Pester in Pester

Perf

Internal fixes

New Contributors

Full Changelog: https://github.com/pester/Pester/compare/5.4.1...5.5.0

5.5.0-rc1

11 months ago

What's Changed

Pester in Pester

Perf

Internal fixes

New Contributors

Full Changelog: https://github.com/pester/Pester/compare/5.4.1...5.5.0-rc1

5.4.1

1 year ago

What's Changed

Fixes

Performance

Internal fixes

New Contributors

Full Changelog: https://github.com/pester/Pester/compare/5.4.0...5.4.1

5.4.0

1 year ago

In this release there are many fixes and improvements thanks @fflaten to providing most of them!

ANSI colors for output

Output is now printed with colors in AzureDevOps:

image

To achieve that, Pester detects if the host supports ANSI codes and uses them to output the string. You can control this by this new option:

[PesterConfiguration]::Default.Output.RenderMode

Default Description                                                                                 Value
------- -----------                                                                                 -----
Auto    The mode used to render console output, options are Auto, Ansi, ConsoleColor and Plaintext. Auto

And optionally switch back to classical ConsoleColor, or a new PlainText mode that outputs just text without any embedded formatting.

Check Multiple aliases for Should -HaveParameter

Should -HaveParameter can now ensure that there are multiple aliases set for a parameter.

function f { 
    param( [Alias('UserName')] $Name ) 

    $Name     
}


Get-Command f | Should -HaveParameter Name -Alias 'n', 'UserName'

InvalidResult:
Line |
   1 | Get-Command f | Should -HaveParameter Name -Alias 'n', 'UserName'
     | Expected command f to have a parameter Name, with aliases 'n' and 'UserName', 
     | but it didn't have an alias 'n'.

Always return to the original path

Pester captures the current path in which Invoke-Pester is invoked, and returns to this path after the execution of the test, even if the tests change it:

PS C:\projects\myModule> Invoke-Pester -Container (
    New-PesterContainer -ScriptBlock {
        Describe "d" {
            It "i" {
                Set-Location C:\Windows
            } 
        } 
    })

This will return back to C:\projects\myModule after your tests finish running.

Mocking in Manifest Modules

Mock, Should -Invoke and InModuleScope are now allowed for manifest modules.

Additional changes and improvements

Internal fixes and improvements

New Contributors

Full Changelog: https://github.com/pester/Pester/compare/5.3.3...5.4.0

5.4.0-rc1

1 year ago

In this release there are many fixes and improvements thanks @fflaten to providing most of them!

ANSI colors for output

Output is now printed with colors in AzureDevOps:

image

To achieve that, Pester detects if the host supports ANSI codes and uses them to output the string. You can control this by this new option:

[PesterConfiguration]::Default.Output.RenderMode

Default Description                                                                                 Value
------- -----------                                                                                 -----
Auto    The mode used to render console output, options are Auto, Ansi, ConsoleColor and Plaintext. Auto

And optionally switch back to classical ConsoleColor, or a new PlainText mode that outputs just text without any embedded formatting.

Check Multiple aliases for Should -HaveParameter

Should -HaveParameter can now ensure that there are multiple aliases set for a parameter.

function f { 
    param( [Alias('UserName')] $Name ) 

    $Name     
}


Get-Command f | Should -HaveParameter Name -Alias 'n', 'UserName'

InvalidResult:
Line |
   1 | Get-Command f | Should -HaveParameter Name -Alias 'n', 'UserName'
     | Expected command f to have a parameter Name, with aliases 'n' and 'UserName', 
     | but it didn't have an alias 'n'.

Always return to the original path

Pester captures the current path in which Invoke-Pester is invoked, and returns to this path after the execution of the test, even if the tests change it:

PS C:\projects\myModule> Invoke-Pester -Container (
    New-PesterContainer -ScriptBlock {
        Describe "d" {
            It "i" {
                Set-Location C:\Windows
            } 
        } 
    })

This will return back to C:\projects\myModule after your tests finish running.

Mocking in Manifest Modules

Mock, Should -Invoke and InModuleScope are now allowed for manifest modules.

Additional changes and improvements

Internal fixes and improvements

New Contributors

Full Changelog: https://github.com/pester/Pester/compare/5.3.3...5.4.0-rc1

5.3.3

2 years ago

Issues Fixed

  • Fix container failure output #2167
  • Test on less legacy systems #2164
  • Fix discord link in readme #2165

5.3.2

2 years ago

Issues Fixed

  • fix ForEach casing in Context #2111

  • Fix duplicate key exception in Should-InvokeInternal debug logging #2130

  • Adds default parameter set to New-MockObject #2160

  • Update help for New-Fixture #2097

  • Add discord-link and cleanup README #2102

  • Update devcontainer to NET 6.0 SDK and Powershell 7.2 #2116

  • Use newer images in our pipeline #2141

5.3.1

2 years ago

5.3.1

Issues Fixed

  • Bump 5.3.1
  • Fix Profiler code coverage in all loops #2081
  • fix accidental path input in interactive execution #2078
  • Fix mock object with 2 and more methods #2068

See full log here

5.3.0

2 years ago

Thanks @ArmaanMcleod, @fflaten and @johlju for all your contributions and support!

New Code Coverage mode

New way of measuring code coverage was added. It uses the core of Profiler to measure code coverage, instead of using breakpoints. This makes code coverage much much faster for bigger solutions. To enable it use UseBreakpoints option, and set it to $false:

$configuration.CodeCoverage.UseBreakpoints = $false

The option is marked as experimental, but from our tests it looks like the new approach is as accurate as the breakpoint based approach. The new approach does not yet work on PS3.

  • Add Profiler based code coverage #1937

Configure output for failed tests

New option for controlling the verbosity of failed tests was added:

$configurationOutput.StackTraceVerbosity

With the folloing levels:

None - All Stack trace is hidden FirstLine - First line of stack trace is shown Filtered - Filtered lines that belong to Pester. This is default. Full - All stack trace is shown

None

More info and more screenshots are in the PR.

  • Limit output information for failed tests #1975

Shorter Detailed output

Output for discovery and filter was reduced in the Detailed and Diagnostic output, by moving discovery messages per file into the Diagnostic output, and hiding the Filter messages from the default Diagnostic output. All messages are still available via custom filter in $configuration.Debug.WriteDebugMessagesFrom.

More info and more screenshots are in the PR. reduced output diagnostic output

  • Update output for Discovery and Filter #1969

Automatic CI detection

Pester automatically detects if it is running in AzureDevOps or GitHub Actions and augments the output to report errors correctly.

Github actions output Github actions log

The default is to autodetect CI but it can be disabled by:

$configuration.Output.CIFormat = 'None'

More info and more screenshots are in the PR.

  • Azure Devops & Github Actions error logging #1996

Override properties and methods via New-MockObject

New-MockObject can now override properties and methods on the created object. It counts the number of executions of a method and collects parameters provided to methods. It can also take an object as input and add properties and methods to it.

# Create an empty process object
$o = New-Object -TypeName 'System.Diagnostics.Process'
# Override Kill method to just return "killed"
$mockObject = New-MockObject -InputObject $o -Methods @{ Kill = { param($entireProcessTree) "killed" } }

$mockObject.Kill()
$mockObject.Kill($true)

# Inspect the history of invocations in `_<methodName>` 
$mockObject._kill

# Output:
# Call Arguments
# ---- ---------
#    1 {}
#    2 {True}

More examples are in the tests: https://github.com/pester/Pester/blob/main/tst/functions/New-MockObject.Tests.ps1 Real life-examples here: https://youtu.be/8GWqkGvV3H4?t=2517

  • Add Ability to Override Properties on New-MockObject #1838

Skip remaining tests when any fails

A new option was added, that allows skipping the rest of the execution when any test fails. It can skip tests in the current block and all child blocks, as well as skip all remaining tests in the file, or in the whole run.

$configuration.Run.SkipRemainingOnFailure = 'Block'

The following scopes are supported:

Block - Skip all remaining tests in current bloc k(including child blocks and tests) after a failed test. Container - Skip all remainng tests in the container (file or scriptblock) after a failed test. Run - Skip all tests across all containers in a run after a failed test. None - Default, keep original behaviour.

Run

We used Skipped test result to skip those tests, but there was a lively discussion about how this should be achieved. Share your feedback if you have any.

More info and more screenshots are in the PR.

  • Added Run.SkipRemainingOnFailure option #2023

Log conflicting varibles in Mocks

Mocks pick up all variables from your tests. When your variable names are the same as parameter names of a mocked command this can lead to unexpected results in ParameterFilter. We added a new message in the Diagnostic log that warns you that a variable is in conflict with a parameter name.

It 'filter should not pass due to test-variable' {
    $SamAccountName = 'abc'
    # Mock parameter filter below does not pass because SamAccountName is 'def'
    Get-Stuff -SamAccountName 'def'
    # Mock parameter filter below does "incorrectly" passes because SamAccountName is not specified here
    # but is set to 'abc' by the variable above
    Get-Stuff

    # This assertion fails because there was 1 call, and not 0 calls, because we had naming conflict betwween 
    # parameters and our variables.
    Should -Invoke Get-Stuff -Times 0 -Exactly -ParameterFilter { $SamAccountName -eq 'abc' }
}

log

  • Log conflicting variables in Should -Invoke -ParameterFilter #1973

Better TestDrive performance

TestDrive internals were improved to save the location of test drive directory, instead of querying it every time. This greatly improved performance of any run.

When you don't need TestDrive or TestRegistry, you can disable both TestDrive and TestRegistry entirely, to get more performance gains:

$configuration.TestDrive.Enabled = $false
$configuration.TestRegistry.Enabled = $false

Disabling TestRegistry is also useful on restricted systems when access to Windows Registry is disabled by group policy.

  • Use profiler to improve perf of test drive, name expanding and add-member #1955
  • Add option to disable TestDrive and TestRegistry #2008

Additional fixes in documentation, output, and other bugs squashed:

  • Fixed formatting for null elements in an array #1961
  • Make InModuleScope-parameters available as variables in scriptblock #1957
  • Improve operator-help returned from Get-ShouldOperator #1988
  • Added Pester version message to detailed and diagnostic output #1962
  • Removed StartMessage from output #1968
  • Add formatdata to ensure list view for all sections in PesterConfiguration #1964
  • Update reporttheme output to remove hard coded colour names #1934
  • Set name in xml element testsuite #2034
  • Added FileContentMatchMultilineExactly should assertion #2030
  • Added Filter.ExcludeLine option #2016
  • Add PSObject boxing support in PesterConfiguration #1978
  • Add missing container-parameters to Data #1986
  • Update InvokeVerifiable error message and add negate support #1976
  • Adds support for Register-ArgumentCompleter #1979
  • Fix throwing on missing folders #2012
  • make Value-property setter private in options #1994
  • Add analyzerrule for object-commands #1753
  • Update New-PesterConfiguration help #1946
  • Fix session state in Should -Invoke to use the correct session state #1954
  • Update Pester.RSpec.ps1 #1951
  • Save all files with UTF8BOM #1950
  • Fix formatting in all files #1949
  • Allow positional parameter in get-shouldoperator #1947
  • Remove about links they break website MDX #1948
  • Added missing format tests #1935

See full log here