Skip to content

Instantly share code, notes, and snippets.

@nohwnd
Created September 30, 2018 08:43
Show Gist options
  • Save nohwnd/580db3f3cf7931e879098504a3c7cf29 to your computer and use it in GitHub Desktop.
Save nohwnd/580db3f3cf7931e879098504a3c7cf29 to your computer and use it in GitHub Desktop.
Automatic example testing
# command to be tested
$commandName = 'Get-Command'
# get all examples from the help
$examples = Get-Help $commandName -Examples
# make a describe block that will contain tests for this
Describe "Examples from $commandName" {
$examples.Examples.Example | foreach {
# examples have different format,
# at least the ones I used that MS provided
# so you need to either standardize them,
# or provide some hints about what to do
# such as putting the code first
# followed by
# #output: the desired output
# here I am simply taking the first line and removing 'PS C:\>'
# which makes some of the tests fail
$example = $_.Code -replace "`n.*" -replace "PS C:\\>"
# for every example we want a single It block
It "Example - $example" {
# mock the tested command so we don't actually do anything
# because it can be unsafe and we don't have the environment setup
# (so the only thing we are testing is that the code is semantically
# correct and provides all the needed params)
Mock $commandName {
# I am returning true here,
# but some of the examples drill down to the returned object
# so in strict mode we would fail
$true
}
# here simply invoke the example
$result = Invoke-Expression $example
# and check that we got result from the mock
$result | Should -BeTrue
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment