Skip to content

Instantly share code, notes, and snippets.

@Splaxi
Forked from nohwnd/helptest.ps1
Last active October 19, 2018 05:24
Show Gist options
  • Save Splaxi/2cee49e084359161290e582afbd13767 to your computer and use it in GitHub Desktop.
Save Splaxi/2cee49e084359161290e582afbd13767 to your computer and use it in GitHub Desktop.
Automatic example testing
$excludeCommands = @(
"Invoke-D365SCDPBundleInstall"
)
$commandsRaw = Get-Command -Module d365fo.tools
if ($excludeCommands.Count -gt 0) {
$commands = $commandsRaw | Select-String -Pattern $excludeCommands -SimpleMatch -NotMatch
}
else {
$commands = $commandsRaw
}
foreach ( $commandName in $commands) {
# command to be tested
#$commandName = 'New-D365Bacpac'
#$commandName = 'Get-D365PackageLabelFile'
# 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:\\>"
if ( ($example -like "*|*" ) -or (-not ($example -match $commandName)) ) {
It "Example - $example" -Skip { $true }
}
else {
# 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