OCram85/DroneHelper
OCram85
/
DroneHelper
Archived
1
0
Fork 0
This repository has been archived on 2023-10-10. You can view files and clone it, but cannot push or open issues or pull requests.
DroneHelper/src/Pester/Invoke-UnitTest.ps1

111 lines
3.6 KiB
PowerShell

function Invoke-UnitTest {
<#
.SYNOPSIS
Runs all Pester tests within this repo.
.DESCRIPTION
This Cmdlet is used in Drone pipeline to perform the Pester based unit tests.
.PARAMETER CoverageFormat
Pester provides the formats JaCoCo ans CoverageGutters. Default is JaCoCo.
These are the known use cases:
- JaCoCo -> Used as standard coverage report used by sonar
- CoverageGutters -> Custom Format to show coverage in VSCode.
.PARAMETER Verbosity
This parameter sets the Pester detail level. Default is 'Normal.' Available values are:
'None', 'Normal', 'Detailed', 'Diagnostic'
.PARAMETER PassThru
Tells Invoke-UnitTest to write back the Pester results into your variable / output.
.PARAMETER Tag
Pester build in tag filter as string array.
.PARAMETER ExcludeTag
Pester build in exclude filter for tests as string array.
.INPUTS
[None] No pipeline input.
.OUTPUTS
[None] No pipeline output.
.EXAMPLE
Invoke-UnitTest
#>
[CmdletBinding()]
[Diagnostics.CodeAnalysis.SuppressMessageAttribute(
'PSUseConsistentWhitespace',
'',
Justification = 'Hashtable bug in ScriptAnalyzer 1.19.1'
)]
param (
[Parameter( Mandatory = $false )]
[ValidateSet('JaCoCo', 'CoverageGutters')]
[string]$CoverageFormat = 'JaCoCo',
[Parameter(Mandatory = $false)]
[ValidateSet('None', 'Normal', 'Detailed', 'Diagnostic')]
[string]$Verbosity = 'Normal',
[Parameter(Mandatory = $false)]
[switch]$PassThru,
[Parameter(Mandatory = $false)]
[ValidateNotNullOrEmpty()]
[string[]]$Tag,
[Parameter(Mandatory = $false)]
[ValidateNotNullOrEmpty()]
[string[]]$ExcludeTag
)
process {
$Repo = Get-RepoPath
Write-Verbose -Message '===== Running Pester =====' -Verbose:$VerbosePreference
$PesterConf = New-PesterConfiguration
$PesterConf.Run.Path = (Resolve-Path -Path './src').Path
$PesterConf.Run.Exit = $false
$PesterConf.Run.PassThru = $true
$PesterConf.CodeCoverage.Enabled = $true
$PesterConf.CodeCoverage.OutputFormat = $CoverageFormat
$PesterConf.TestResult.Enabled = $true
$CovFiles = Get-ChildItem -Path $Repo.Src.PS1Filter -Recurse | Where-Object {
$_.BaseName -notmatch '.Tests'
} | Select-Object -ExpandProperty 'FullName'
$PesterConf.CodeCoverage.Path = $CovFiles
$PesterConf.Output.Verbosity = $Verbosity
# Set Tags if given
if ($Tag) {
$PesterConf.Filter.Tag = $Tag
}
if ($ExcludeTag) {
$PesterConf.Filter.ExcludeTag = $ExcludeTag
}
$TestResults = Invoke-Pester -Configuration $PesterConf -ErrorAction 'Stop'
try {
$ResFileParams = @{
InputObject = $TestResults
Path = $Repo.Build.PesterLogPath
Type = 'Pester'
ErrorAction = 'Stop'
}
Write-ResultFile @ResFileParams
}
catch {
Write-FailureStateFile -StepName 'Pester'
throw ('{0} tests failed!' -f $TestResults.FailedCount)
}
if ($TestResults.FailedCount -gt 0) {
Write-FailureStateFile -StepName 'Pester'
throw ('{0} tests failed!' -f $TestResults.FailedCount)
}
if ($PassThru.IsPresent) {
Write-Output -InputObject $TestResults
}
}
}