* Add -SkipHttpErrorCheck to web request cmdlets The -SkipHttpErrorCheck flag causes web request cmdlets (Invoke-WebRequest and Invoke-RestMethod) to ignore HTTP statuses that are error statuses and treat them as successful requests. This allows users to handle the responses using their own error handler and gives them access to the full, unmodified response body and headers. * Add -ResponseStatusVariable to Invoke-RestMethod This allows the user to specify a variable to set to the integer value of the respons's status code, Analogous to using -ResponseHeadersVariable to retrieve the headers of the response. This can be used to distinguish error messages from success messages when used with -SkipHttpErrorCheck. * Fix coding-style error The summary for the SkipHttpErrorCheck property didn't conform to style guidelines. This changes the summary to start with "Gets or sets". * Add tests for -SkipHttpErrorCheck This flag supresses terminating errors on web cmdlets. The tests are written to check that it properly supressed the errors. * Add test for -StatusCodeVariable Th -StatusCodeVariable parameter specifies an output variable for the status code with Invoke-RestMethod. This test makes sure it functions properly. * Fix typos and style for -SkipHttpErrorCheck tests Variables had different cases from each other and some parameter names were lower case. * Fix typos and style for -StatusCodeVariable test Variables had different cases from each other and some parameter names were lower case. * Add failure tests when missing -SkipHttpErrorCheck These tests ensure that Web Cmdlets fail when -SkipHttpErrorCheck is missing. * Clean up tests for -SkipHttpErrorCheck Per discussion on the pull requests. This commit fixes up style problems with the tests for -SkipHttpErrorCheck. * Add more status tests for -StatusCodeVariable Previously, the -StatusCodeVariable flag in Invoke-RestMethod only had tests for 200 status. This commit adds tests for 404 and 500 statuses and removes -SkipHttpErrorCheck from the 200 check. * Fix response body in -StatusCodeVariable test The test was copy/pastes from the 200 status test. The body indicated success. This commit fixes that so it is also an error indicator.
Pester Testing Test Guide
Also see the Writing Pester Tests document.
Running Pester Tests
Go to the top level of the PowerShell repository and run: Start-PSPester
inside a self-hosted copy of PowerShell.
You can use Start-PSPester -Tests SomeTestSuite* to limit the tests run.
Testing new powershell processes
Any launch of a new powershell process must include -noprofile so that
modified user and system profiles do not causes tests to fail. You also must
take care to call the development copy of PowerShell, which is not the first
one on the path.
Example:
$powershell = Join-Path -Path $PsHome -ChildPath "pwsh"
& $powershell -noprofile -command "ExampleCommand" | Should Be "ExampleOutput"
Portability
Some tests simply must be tied to certain platforms. Use Pester's
-Skip directive on an It statement to do this. For instance to run
the test only on Windows:
It "Should do something on Windows" -Skip:($IsLinux -Or $IsMacOS) { ... }
Or only on Linux and OS X:
It "Should do something on Linux" -Skip:$IsWindows { ... }
Pending
When writing a test that should pass, but does not, please do not skip or delete
the test, but use It "Should Pass" -Pending to mark the test as pending, and
file an issue on GitHub.